Перегрузка перечислений и свойств в VB.NET - PullRequest
3 голосов
/ 23 сентября 2010

У меня есть базовый класс со следующим перечислением и свойством:

    Public Enum InitType
        Focus = 0
        Help = 1
        ErrorToolTip = 2
    End Enum

    Property ToolTipInitType() As InitType
        Get
            Return m_initType
        End Get
        Set(ByVal value As InitType)
            m_initType = value
        End Set
    End Property

Я хотел бы создать производный класс, который расширяет перечисление, поэтому перечисление производных классов будет:

    Public Enum InitType
        Focus = 0
        Help = 1
        ErrorToolTip = 2
        HelpPopUp = 3
    End Enum

Прежде всего, как мне это сделать - просто перегрузить? И во-вторых, будет ли мое исходное свойство автоматически подбирать новое перечисление при использовании производного класса, или мне тоже придется его перегрузить?

Любая помощь с благодарностью.

Спасибо

Sniffer

1 Ответ

4 голосов
/ 23 сентября 2010

Есть способ наследовать что-то, что работает почти так же, как enum.Что касается использования вашего кода, это выглядит примерно так же.Хитрость заключается в том, чтобы определить класс со статическими / общими полями, а не с помощью перечисления.

Public Class InitType
    Protected Sub New()
    End Sub
    Public Shared ReadOnly Focus As New InitType()
    Public Shared ReadOnly Help As New InitType()
    Public Shared ReadOnly ErrorToolTip As New InitType()
End Class

Этот синтаксис используется при использовании его в вашем классе.Вот так:

Public Class ExtendingEnums
    Private m_initType As InitType = InitType.Focus
    Property ToolTipInitType() As InitType
        Get
            Return m_initType
        End Get
        Set(ByVal value As InitType)
            m_initType = value
        End Set
    End Property
End Class

Теперь, чтобы расширить «enum», вы просто сделаете это:

Public Class InitTypeEx
    Inherits InitType
    Public Shared ReadOnly HelpPopUp As New InitType()
End Class

Теперь вы можете получить доступ к производному enum со всеми исходными значениями плюс новым.

Public Sub Execute()
    Dim ee As New ExtendingEnums()
    ee.ToolTipInitType = InitType.Help
    ee.ToolTipInitType = InitTypeEx.HelpPopUp
    ee.ToolTipInitType = InitTypeEx.Focus
End Sub
...