2008-10-10 15 views
9

Quiero crear una colección en VB.NET, pero solo quiero que acepte objetos de cierto tipo. Por ejemplo, quiero crear una clase llamada "FooCollection" que actúa como una colección en todos los sentidos, pero solo acepta objetos de tipo "Foo".VB.NET Colección Strong-typed

pensé que podía hacerlo utilizando los genéricos, utilizando la siguiente sintaxis:

Public Class FooCollection(Of type As Foo) 
     Inherits CollectionBase 

     ... 

    End Class 

Pero me da un error cuando compilo lo que yo "debe aplicar un descriptor de acceso por defecto", por lo que es evidente que hay algo que falta. No deseo especificar el tipo que acepta cuando instalo. Quiero que el FooCollection sea específico y solo acepte objetos Foo. Lo he visto hecho en C# con una lista fuerte, así que tal vez todo lo que estoy buscando es la sintaxis de VB.NET.

Gracias por su ayuda!

EDIT: Gracias por la respuesta. Que lo haría, pero yo quería tener el ClassType llamado de cierta manera, en realidad logró exactamente lo que estaba buscando con el siguiente código:

Public Class FooCollection 
    Inherits List(Of Foo) 

End Class 

Respuesta

10

¿Por qué no sólo tiene que utilizar un List(Of Foo) .. . Ya está en VB.NET bajo System.Collections.Generic. Para usarlo, simplemente se declaran como tales:

Private myList As New List(Of Foo) 'Creates a Foo List' 
Private myIntList As New List(Of Integer) 'Creates an Integer List' 

Ver MSDN > List(T) Class (System.Collections.Generic) para más información.

+0

Depende de lo que está haciendo. La lista está pensada para uso interno dentro del código de la aplicación. Debería evitar escribir API públicas que acepten o devuelvan List --considerando usar una superclase o una interfaz de colección en su lugar. –

1

Usted necesita para implementar una propiedad predeterminada para la recogida de esta manera:

Default Public Property Item(ByVal Index As Integer) As Foo 
Get 
    Return CType(List.Item(Index), Foo) 
End Get 
Set(ByVal Value As Foo) 
    List.Item(Index) = Value 
End Set 

Fin de la Propiedad