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.
Syntax
[genericmodifier] typename [ As constraintlist ]
Součásti
| Pojem | Definice |
|---|---|
genericmodifier |
Nepovinný parametr. Dá se použít jenom v obecných rozhraních a delegátech. Kovariantu typu lze deklarovat pomocí klíčového slova out nebo kontravariantní pomocí klíčového slova in . Viz kovariance a kontravariance. |
typename |
Povinná hodnota. Název parametru typu Toto je zástupný symbol, který bude nahrazen definovaným typem poskytnutým odpovídajícím argumentem typu. |
constraintlist |
Nepovinný parametr. Seznam požadavků, které omezí datový typ, který je možné zadat pro typename . Pokud máte více omezení, vložte je do složených závorek ( { } ) a oddělte je čárkami. Seznam omezení je nutné zavést pomocí klíčového slova as . Použijete ji As jenom jednou na začátku seznamu. |
Poznámky
Každý obecný programovací prvek musí mít alespoň jeden parametr typu. Parametr typu je zástupný symbol pro konkrétní typ ( konstruovaný element), který určuje kód klienta při vytváření instance 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 Visual Basic. Další informace o názvech parametrů typů naleznete v tématu deklarované názvy elementů.
Pravidla
Závorky. Pokud zadáte seznam parametrů typu, je nutné jej uzavřít do závorek a je třeba uvést seznam s klíčovým slovem. Použijete ji
Ofjenom jednou na začátku seznamu.Jednotlivým. Seznam omezení pro parametr typu může zahrnovat následující položky v libovolné kombinaci:
Libovolný počet rozhraní. Zadaný typ musí implementovat každé rozhraní v tomto seznamu.
Nejvýše jedna třída. Poskytnutý typ musí dědit z této třídy.
Klíčové slovo
New. Zadaný typ musí vystavit konstruktor bez parametrů, ke kterému má přístup váš obecný typ. To je užitečné, pokud omezíte parametr typu jedním nebo více rozhraními. Typ, který implementuje rozhraní, nutně nezveřejňuje konstruktor a v závislosti na úrovni přístupu konstruktoru, kód v obecném typu nemusí mít přístup k němu.Buď
Classklíčové slovo, neboStructureklíčové slovo.ClassKlíčové slovo omezuje parametr obecného typu tak, aby vyžadovalo, aby jakýkoliv argument typu, který je předaný, byl odkazovým typem, například řetězcem, polem nebo delegátem, nebo objektem vytvořeným z třídy.StructureKlíčové slovo omezuje parametr obecného typu tak, aby vyžadovalo, aby jakýkoli argument typu, který je předaný, byl typ hodnoty, například struktura, výčet nebo základní datový typ. Nemůžete zahrnoutClassiStructuredo stejnéhoconstraintlist.
Zadaný typ musí splňovat všechny požadavky, které zahrnete do
constraintlist.Omezení pro jednotlivé parametry typu jsou nezávislá na omezeních u jiných parametrů typu.
Chování
Nahrazování v době kompilace. Když vytvoříte konstruovaný typ z obecného programovacího prvku, zadáte definovaný typ pro každý parametr typu. kompilátor Visual Basic nahradí daný typ pro všechny výskyty
typenamev rámci obecného prvku.Neexistence omezení Pokud nezadáte žádná omezení parametru typu, je 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 znázorňuje kostru definice třídy obecného slovníku, včetně funkce kostry 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
Vzhledem k tomu dictionary , že je obecný, kód, který ho používá, může z něj vytvořit nejrůznější objekty, každá má stejné funkce, ale funguje na jiném datovém typu. Následující příklad ukazuje řádek kódu, který vytvoří dictionary objekt s String položkami a Integer klíči.
Dim dictInt As New dictionary(Of String, Integer)
Příklad 3
Následující příklad ukazuje ekvivalentní kostru definice 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