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 typename který 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 neboStructure
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
aStructure
do stejnéhoconstraintlist
souboru .
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