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 Of jenom 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ď Class klíčové slovo, nebo Structure klíč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 zahrnout Class i Structure do stejného constraintlist .

    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 typename v 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

Viz také