2008-10-10 6 views
9

Ich möchte eine Sammlung in VB.NET erstellen, aber ich möchte nur Objekte eines bestimmten Typs akzeptieren. Ich möchte zum Beispiel eine Klasse namens "FooCollection" erstellen, die sich in jeder Hinsicht wie eine Sammlung verhält, aber nur Objekte vom Typ "Foo" akzeptiert.VB.NET Strong-typisierte Sammlung

Ich dachte, ich dies mit Generika tun konnte, mit der folgenden Syntax:

Public Class FooCollection(Of type As Foo) 
     Inherits CollectionBase 

     ... 

    End Class 

Aber ich erhalte eine Fehlermeldung, wenn ich es kompilieren, dass ich „eine Standard-Zugriffs implementieren müssen“, so klar es ist etwas fehlt. Ich möchte nicht den Typ angeben, den ich akzeptiere, wenn ich instanziiere - Ich möchte die FooCollection selbst so spezifisch machen, dass sie nur Foo-Objekte akzeptiert. Ich habe es in C# mit einer stark typisierten Liste gesehen, also suche ich vielleicht nur nach der Syntax von VB.NET.

Danke für Ihre Hilfe!

EDIT: Danke für die Antwort. Das würde es tun, aber ich wollte den classtype eine bestimmte Art und Weise benannt haben, ich erreichen eigentlich genau das, was ich für den folgenden Code suchen:

Public Class FooCollection 
    Inherits List(Of Foo) 

End Class 

Antwort

10

Warum gehst du nicht einfach ein List(Of Foo) verwenden .. Es ist bereits in VB.NET unter System.Collections.Generic. So verwenden Sie erklären einfach als solche:

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

Siehe MSDN > List(T) Class (System.Collections.Generic) für weitere Informationen.

+0

Es hängt davon ab, was er tut. Die Liste ist für den internen Gebrauch innerhalb des Anwendungscodes vorgesehen. Sie sollten es vermeiden, öffentliche APIs zu schreiben, die die Liste akzeptieren oder zurückgeben, indem Sie stattdessen eine Superklasse oder eine Sammlungsschnittstelle verwenden. –

1

Sie benötigt eine Standardeigenschaft für die Sammlung wie folgt umzusetzen:

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 

End Property