2009-12-08 2 views
4

Я хотел бы сделать что-то вроде этого:Как создать общее свойство в VB.NET?

Private _myCollection As IList(Of T) 
Public Property MyProperty(Of T)() as IList(Of T) 
    Get 
     Return Me._myCollection 
    End Get 
    Set(ByVal value As String) 
     Me._myCollection = value 
    End Set 
End Property 

В принципе, я хочу иметь коллекцию предметов, которые могут быть любого типа. Тогда я смогу сделать что-то вроде этого:

Dim myPropertyValue as <the type of some value> 
if (MyProperty.Contains(<some value>)) 
    myPropertyValue = CType(MyProperty(<some value>), <the type of some value>) 

Как это сделать? Или есть лучший способ, чем использовать общий тип?

+0

Если вы используете дженерики, вам не нужно будет вызывать 'CType'. – Joel

+0

Любопытно, в какой ситуации вы используете это? :) –

+0

Чтобы выполнить соглашение о дизайне рамки, вы должны сохранить свои свойства коллекции только для чтения, и у вас есть экземпляр класса объекта списка. –

ответ

8

Вы, возможно, придется создать общий класс, чтобы сделать это

Public Class MyClass(Of T) 
    Private _myCollection As IList(Of T) 
    Public Property MyProperty() as IList(Of T) 
     Get 
      Return Me._myCollection 
     End Get 
     Set(ByVal value As String) 
      Me._myCollection = value 
     End Set 
    End Property 
End Class 
+0

+1 Это первая мысль, которая пришла мне на ум, я не был уверен, что ее лучший способ –

+0

Weird. Я бы не подумал, что класс должен быть украшен. Но мне есть чему поучиться. – IAmAN00B

+0

Свойство - это не что иное, как get и set методы для отображения переменной внутри класса. Сама переменная создается при создании экземпляра класса. Если вы когда-либо пишете Java, это станет понятным, поскольку нет таких свойств, как VB или C#. – Joel

0

Если вы не хотите, чтобы конвертировать ваши whole class to a generic one вы можете также добавить общие процедуры к классу (см MSDN):

Public Function GetMyProperty(Of T) As T 
    .... 
End Function 
Public Sub SetMyProperty(value as T) 
    ... 
End Sub 

Но это не так элегантно, как свойства.

Смежные вопросы