Typenliste (Visual Basic)

Gibt die Typparameter für ein generisches Programmierelement an. Mehrere Parameter werden durch Kommas getrennt. Es folgt die Syntax für einen Typparameter.

Syntax

[genericmodifier] typename [ As constraintlist ]

Bestandteile

Begriff Definition
genericmodifier Dies ist optional. Kann nur in generischen Schnittstellen und Delegaten verwendet werden. Sie können einen Typ kovariant deklarieren, indem Sie das Out-Schlüsselwort verwenden, oder kontravariant, indem Sie das In-Schlüsselwort verwenden. Siehe Kovarianz und Kontravarianz.
typename Erforderlich. Der Name des Typparameters. Es handelt sich um einen Platzhalter, der durch einen definierten Typ ersetzt werden soll, der vom entsprechenden Typargument bereitgestellt wird.
constraintlist Optional. Die Liste der Anforderungen, die den Datentyp einschränken, der für typename angegeben werden kann. Wenn mehrere Einschränkungen vorhanden sind, schließen Sie sie in geschweifte Klammern ({ }) ein, und trennen Sie sie durch Kommas. Sie müssen die Einschränkungsliste mit dem As-Schlüsselwort einführen. Sie verwenden As nur einmal am Anfang der Liste.

Bemerkungen

Jedes generische Programmierelement muss mindestens einen Typparameter aufweisen. Ein Typparameter ist ein Platzhalter für einen bestimmten Typ (ein konstruiertes Element), den Clientcode angibt, wenn er eine Instanz des generischen Typs erstellt. Sie können generische Klassen, Strukturen, Schnittstellen, Prozeduren oder Delegaten definieren.

Weitere Informationen zum Definieren eines generischen Typs finden Sie unter Generische Typen in Visual Basic. Weitere Informationen zu Typparameternamen finden Sie unter Deklarierte Elementnamen.

Regeln

  • Klammern: Wenn Sie eine Typparameterliste angeben, müssen Sie sie in Klammern einschließen und mit dem Of-Schlüsselwort einführen. Sie verwenden Of nur einmal am Anfang der Liste.

  • Einschränkungen: Eine Liste der Einschränkungen für einen Typparameter kann die folgenden Elemente in beliebiger Kombination enthalten:

    • Eine beliebige Anzahl von Schnittstellen: Der angegebene Typ muss jede Schnittstelle in dieser Liste implementieren.

    • Höchstens eine Klasse: Der angegebene Typ muss von dieser Klasse erben.

    • das Schlüsselwort New. Der angegebene Typ muss einen parameterlosen Konstruktor verfügbar machen, auf den Ihr generischer Typ zugreifen kann. Dieser ist nützlich, wenn Sie einen Typparameter durch eine oder mehrere Schnittstellen einschränken. Ein Typ, der Schnittstellen implementiert, macht nicht zwangsläufig einen Konstruktor verfügbar, und abhängig von der Zugriffsebene eines Konstruktors kann der Code innerhalb des generischen Typs möglicherweise nicht darauf zugreifen.

    • Das Schlüsselwort Class oder Structure: Das Class-Schlüsselwort bewirkt für einen generischen Typparameter, dass es sich bei jedem an ihn übergebenen Typargument um einen Verweistyp handeln muss, z. B. eine Zeichenfolge, ein Array, einen Delegaten oder ein aus einer Klasse erstelltes Objekt. Das Structure-Schlüsselwort bewirkt für einen generischen Typparameter, dass es sich bei jedem an ihn übergebenen Typargument um einen Werttyp handeln muss, z. B. eine Struktur, eine Enumeration oder einen elementaren Datentyp. Class und Structure dürfen nicht in derselben constraintlist vorhanden sein.

    Der angegebene Typ muss alle Anforderungen erfüllen, die Sie in constraintlist einschließen.

    Die Einschränkungen für die einzelnen Typparameter sind unabhängig voneinander.

Verhalten

  • Ersetzung zur Kompilierzeit: Wenn Sie einen konstruierten Typ aus einem generischen Programmierelement erstellen, geben Sie einen definierten Typ für jeden Typparameter an. Der Visual Basic-Compiler ersetzt den Typ für jedes Vorkommen von typename innerhalb des generischen Elements.

  • Fehlen von Einschränkungen: Wenn Sie keine Einschränkungen für einen Typparameter angeben, ist Ihr Code auf die Operationen und Member beschränkt, die vom Objektdatentyp für diesen Typparameter unterstützt werden.

Beispiel 1

Das folgende Beispiel zeigt den Aufbau einer generischen Wörterbuchklassendefinition, einschließlich des Aufbaus einer Funktion zum Hinzufügen eines neuen Eintrags zum Wörterbuch.

Public Class dictionary(Of entryType, keyType As {IComparable, IFormattable, New})
    Public Sub add(ByVal et As entryType, ByVal kt As keyType)
        Dim dk As keyType
        If kt.CompareTo(dk) = 0 Then
        End If
    End Sub
End Class

Beispiel 2

Da dictionary generisch ist, kann der Code, der es verwendet, eine Vielzahl von Objekten daraus erstellen, wobei jedes gleich funktioniert, aber auf einen anderen Datentyp ausgelegt ist. Das folgende Beispiel zeigt eine Codezeile, die ein dictionary-Objekt mit String-Einträgen und Integer-Schlüsseln erstellt.

Dim dictInt As New dictionary(Of String, Integer)

Beispiel 3

Das folgende Beispiel zeigt den Aufbau der entsprechenden Definition, die im vorherigen Beispiel generiert wurde.

Public Class dictionary
    Public Sub Add(ByVal et As String, ByVal kt As Integer)
        Dim dk As Integer
        If kt.CompareTo(dk) = 0 Then
        End If
    End Sub
End Class

Siehe auch