Сделайте свойство Class одновременно Default и Shared - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть класс с именем "PartTypes", который содержит общий список объектов "PartType".У меня есть свойство "Item" внутри класса PartTypes, которое извлекает PartType из общего списка по имени.

В моем основном коде я хочу иметь возможность сказать что-то вроде PartTypes("ItemX") вместо PartTypes.Item("ItemX"),Однако я не могу понять, как сделать общее свойство "Item" также свойством по умолчанию для моего класса.

Вот упрощенная и сжатая версия того, что я хочу сделать, используя список строка не список PartType:

Sub MainCode
    'How I have to do it now:
    oPartType = PartTypes.Item("Type1")

    'How I'd like to do it:
    oPartType = PartTypes("Type1")
End Sub

Class PartTypes
    Private Shared _PartTypes As New List(Of String)

    'Initialize global list of PartTypes:
    Shared Sub New
        _PartTypes.Add("Type1")
        _PartTypes.Add("Type2")
    End Sub

    'Property I want to be the "default":
    Public Shared ReadOnly Property Item(Name As String) As String
        Get
            If _PartTypes.Contains(Name) Then
                Return Name
            Else
                Return ""
            End If
        End Get
    End Property
End Class

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Если вам интересно, почему я хотел бы сделать это так,вот расширенная версия, которая должна дать лучшее представление о том, как я на самом деле использую класс PartTypes (но вам не нужно переваривать все это, если вы не хотите - решение, которое работает для упрощенной версии выше, вероятно, будет работатьза актуальную вещь):

Function SetUpType(TestTypeName As String) As PartType
    If PartTypes.IsType(TestTypeName) Then
        Dim oPartType As PartType

        'How I have to get the PartType object:
        oPartType = PartTypes.Item(TestTypeName)

        'How I'd like to get the PartType object:
        'oPartType = PartTypes(TestTypeName)

        'Set up oPartType:
        '...

        Return oPartType
    Else
        Return New PartType
    End If
End Function

Class PartType
    Public Name As String
    Public [Class] As String
    'Other properties of a PartType:
    '...
End Class

Class PartTypes
    Private Shared _PartTypes As New List(Of PartType)

    'Initialize global list of PartTypes:
    Shared Sub New
        Add("Type1","ClassA")
        Add("Type2","ClassA")
        Add("Type3","ClassB")
        Add("Type4","ClassC")
    End Sub

    Private Shared Function Add(Name As String, [Class] As String) As PartType
        Dim oPartType As New PartType
        oPartType.Name = Name
        oPartType.Class = [Class]

        _PartTypes.Add(oPartType)
        Return oPartType
    End Function

    'Property I want to be the "default":
    Public Shared ReadOnly Property Item(Name As String) As PartType
        Get
            For Each oPartType As PartType In _PartTypes
                If oPartType.Name = Name Then Return oPartType
            Next

            'If Type not found...
            Return New PartType
        End Get
    End Property

    'Examples of other PartTypes functions:
    Public Shared Function IsType([TypeName] As String) As Boolean
        For Each oPartType As PartType In _PartTypes
            If oPartType.Name = [TypeName] Then Return True
        Next

        'If Type not found...
        Return False
    End Function
End Class

1 Ответ

0 голосов
/ 24 декабря 2018

Вы не можете иметь Shared свойство по умолчанию для самого типа - это должен быть экземпляр этого класса.Чтобы установить Item свойство по умолчанию, добавьте Default к свойству:

Class PartTypes
    Default Public ReadOnly Property Item(Name As String) As String
        Get
            '...
        End Get
    End Property
End Class

Использование:

Dim pt = New PartTypes()
Dim x = pt("Type1")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...