2009-12-08 6 views
4

Je voudrais faire quelque chose comme ceci:Comment créer une propriété générique dans 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 

Fondamentalement, je veux avoir une collection d'éléments qui peuvent être de tout type. Ensuite, je serai en mesure de faire quelque chose comme ceci:

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

Comment est-ce que je peux faire ceci? Ou y a-t-il un meilleur moyen que d'utiliser un type générique?

+0

Si vous utilisez des génériques, vous n'aurez pas à appeler 'CType'. – Joel

+0

Juste curieux, quelle est la situation dans laquelle vous utilisez ceci? :) –

+0

Pour suivre la convention de conception de l'infrastructure, vous devez conserver les propriétés de la collection en lecture seule et vous demander d'instancier l'objet liste. –

Répondre

8

Vous devrez peut-être créer une classe générique pour ce faire

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 Ceci est la première pensée qui m'est venue à l'esprit, je n'étais pas sûr si c'était la meilleure façon. –

+0

Bizarre. Je n'aurais pas pensé que la classe devait être décorée. Mais j'ai beaucoup à apprendre. – IAmAN00B

+0

Une propriété n'est rien d'autre que des méthodes get et set pour exposer une variable dans une classe. La variable elle-même est créée lorsque la classe est instanciée. Si vous écrivez Java, cela deviendra plus clair car il n'y a pas de propriétés comme VB ou C#. – Joel

0

Si vous ne voulez pas convertir votre whole class to a generic one vous pouvez également ajouter des procédures génériques à votre classe (voir MSDN):

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

Mais ce n'est pas aussi élégant que les propriétés.

Questions connexes