Seznam typů (Visual Basic)

Určuje parametry typu pro obecný programovací prvek. Více parametrů je odděleno čárkami. Následuje syntaxe pro jeden parametr typu.

Syntaxe

[genericmodifier] typename [ As constraintlist ]

Součástky

Pojem definice
genericmodifier Nepovinné. Lze použít pouze v obecných rozhraních a delegátech. Kovariant typu můžete deklarovat pomocí klíčového slova Out nebo kontravariant pomocí klíčového slova In . Viz kovariance a kontravariance.
typename Povinný: Název parametru typu Jedná se o zástupný symbol, který se má nahradit definovaným typem zadaným argumentem odpovídajícího typu.
constraintlist Nepovinné. Seznam požadavků, které omezují datový typ, pro typenamekterý lze zadat . Pokud máte více omezení, uzavřete je do složených závorek ({ }) a oddělte je čárkami. Seznam omezení je nutné zavést pomocí klíčového slova As . Na začátku seznamu použijete As jenom jednou.

Poznámky

Každý obecný programovací prvek musí mít alespoň jeden parametr typu. Parametr typu je zástupný symbol pro určitý typ ( vytvořený prvek), který klientský kód určuje, když vytvoří instanci obecného typu. Můžete definovat obecnou třídu, strukturu, rozhraní, proceduru nebo delegáta.

Další informace o tom, kdy definovat obecný typ, naleznete v tématu Obecné typy v jazyce Visual Basic. Další informace o názvech parametrů typu naleznete v tématu Deklarované názvy elementů.

Pravidla

  • Závorkách. Pokud zadáte seznam parametrů typu, musíte ho uzavřít do závorek a seznam musíte zavést pomocí klíčového slova Of . Na začátku seznamu použijete Of jenom jednou.

  • Omezení. Seznam omezení parametru typu může obsahovat následující položky v libovolné kombinaci:

    • Libovolný počet rozhraní. Zadaný typ musí implementovat každé rozhraní v tomto seznamu.

    • Ve většině tříd. Zadaný typ musí dědit z této třídy.

    • Klíčové slovo New. Zadaný typ musí vystavit konstruktor bez parametrů, ke kterému má váš obecný typ přístup. To je užitečné, pokud omezíte parametr typu jedním nebo více rozhraními. Typ, který implementuje rozhraní, nemusí nutně vystavit konstruktor a v závislosti na úrovni přístupu konstruktoru nemusí mít kód v rámci obecného typu přístup k němu přístup.

    • Class Klíčové slovo nebo Structure klíčové slovo. Klíčové Class slovo omezuje parametr obecného typu tak, aby vyžadoval, aby byl jakýkoli argument typu předaný jako referenční typ, například řetězec, pole nebo delegát nebo objekt vytvořený z třídy. Klíčové Structure slovo omezuje parametr obecného typu tak, aby vyžadoval, aby byl jakýkoli argument typu předaný jako typ hodnoty, například struktura, výčet nebo základní datový typ. Nelze zahrnout obě Class a Structure do stejného constraintlistsouboru .

    Zadaný typ musí splňovat každý požadavek, který zahrnete do constraintlist.

    Omezení každého parametru typu jsou nezávislá na omezeních na jiných parametrech typu.

Chování

  • Nahrazení časem kompilace Když vytvoříte vytvořený typ z obecného programovacího prvku, zadáte definovaný typ pro každý parametr typu. Kompilátor jazyka Visual Basic nahrazuje zadaný typ pro každý výskyt typename v rámci obecného elementu.

  • Absence omezení Pokud nezadáte žádná omezení parametru typu, bude váš kód omezen na operace a členy podporované datovým typem objektu pro tento parametr typu.

Příklad 1

Následující příklad ukazuje definici kostry obecné třídy slovníku, včetně kostru funkce pro přidání nové položky do slovníku.

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

Příklad 2

Protože dictionary je obecný, kód, který ho používá, může z něj vytvořit celou řadu objektů, z nichž každá má stejnou funkci, ale funguje na jiném datovém typu. Následující příklad ukazuje řádek kódu, který vytvoří dictionary objekt s položkami String a Integer klíči.

Dim dictInt As New dictionary(Of String, Integer)

Příklad 3

Následující příklad ukazuje ekvivalentní definici kostry vygenerovanou předchozím příkladem.

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

Viz také