Gewusst wie: Definieren von typsicheren Auflistungen (Visual Basic)

Sie können mit der von Visual Basic bereitgestellten Collection-Klasse eine Auflistung definieren und erstellen, wie im folgenden Beispiel veranschaulicht.

Public Class widgetRepository
    Public widgetColl As New Microsoft.VisualBasic.Collection()
    ' Insert code to implement additional functionality.
End Class

Diese widgetColl-Auflistung ist jedoch nicht stark typisiert. Sie können ihr jeden Elementtyp hinzufügen, jedoch keine widget-Objekte. Wenn Sie ein Element abrufen, müssen Sie möglicherweise versuchen, es in ein widget zu konvertieren. Dies kann zu Problemen mit der Typsicherheit führen. Nehmen Sie zum Beispiel an, Sie fügen der Auflistung unter Verwendung von folgendem Code einen String hinzu.

Dim notWidget As String = "This is not a widget object!"
widgetColl.Add(notWidget)

In diesem Fall wird bei einem anschließenden Versuch, dieses Element abzurufen, zur Laufzeit eine ArgumentException-Ausnahme ausgelöst, weil das Element der Auflistung nicht vom Typ widget ist.

Schutz vor Problemen mit der Typsicherheit

Wir empfehlen, die Typsicherheit zu erhöhen, indem Sie eine generische Klasse definieren. Hierdurch wird starke Typisierung erzwungen und außerdem Flexibilität für den Datentyp ermöglicht, den die Klasse verwendet. Weitere Informationen finden Sie unter Generische Typen in Visual Basic (Visual Basic).

So definieren Sie eine typsichere Auflistung in einer Klasse

  • Verwenden Sie als Auflistungsklasse eine der generischen Klassen im System.Collections.Generic-Namespace, z. B. List<T>. Anschließend können Sie eine Auflistung erstellen, die ausschließlich auf widget-Member eingeschränkt ist. Im folgenden Beispiel wird veranschaulicht, wie die Deklaration im vorhergehenden Beispiel geändert werden kann, um eine generische Auflistung zu erstellen.

    Public widgetColl As New System.Collections.Generic.List(Of widget)
    

    Bei dieser Vorgehensweise ermöglicht es Ihnen die starke Typisierung, der Auflistung nur widget-Elemente hinzuzufügen, und jedes Element, das Sie über die Item-Eigenschaft abrufen, ist ein widget-Objekt. Aufgrund der starken Typisierung kann der abrufende Code außerdem alle Eigenschaften und Methoden verwenden, die von widget verfügbar gemacht werden.

    – oder –

  • Erstellen Sie eine eigene Auflistungsklasse, ohne vordefinierte Klassen zu verwenden. Schränken Sie die Add-Methode ein, sodass sie nur widget-Objekte akzeptiert, und implementieren Sie die Item-Eigenschaft mit dem Rückgabetyp widget. Weitere Informationen finden Sie unter Gewusst wie: Definieren von typsicheren Auflistungen (Visual Basic).

    Wenn Item Elemente vom Typ Object zurückgibt, können Sie nur auf die Eigenschaften und Methoden explizit zugreifen, die in der Object-Klasse definiert sind. Um auf die widget-Member zuzugreifen, müssen Sie entweder Option Strict Off festlegen oder die CType-Funktion (Visual Basic) verwenden, um das zurückgegebene Element explizit in widget zu konvertieren, wie im folgenden Code gezeigt.

    Dim nextWidget As widget
    Try
        nextWidget = CType(widgetColl.Item(1), widget)
    Catch ex As Exception
        ' Insert code to run if the collection item is not a widget.
    End Try
    

    In beiden Fällen bewirkt die Verwendung von Object-Elementen auf diese Weise, dass Visual Basic späte Bindung ausführt, die zu einer Leistungsverringerung führt.

    Beachten Sie, dass die Collection-Klasse von Visual Basic Object-Elemente akzeptiert und zurückgibt, sodass die Klasse ebenfalls die Nachteile von schwacher Typisierung und später Bindung aufweist.

Siehe auch

Referenz

Collection

System.Collections

System.Collections.Generic

System.Collections.Specialized

Option Strict-Anweisung

Konzepte

Auflistungen in Visual Basic

Generische Typen in Visual Basic (Visual Basic)