Typlista (Visual Basic)
Anger typparametrarna för ett allmänt programmeringselement. Flera parametrar avgränsas med kommatecken. Följande är syntaxen för en typparameter.
Syntax
[genericmodifier] typename [ As constraintlist ]
Delar
Period | Definition |
---|---|
genericmodifier |
Valfritt. Kan endast användas i allmänna gränssnitt och ombud. Du kan deklarera en typkovariant med hjälp av nyckelordet Out eller contravariant med hjälp av nyckelordet In . Se Covariance och Contravariance. |
typename |
Obligatoriska. Namnet på typparametern. Det här är en platshållare som ska ersättas av en definierad typ som tillhandahålls av motsvarande typargument. |
constraintlist |
Valfritt. Lista över krav som begränsar den datatyp som kan anges för typename . Om du har flera begränsningar omger du dem i klammerparenteser ({ } ) och separerar dem med kommatecken. Du måste introducera villkorslistan med nyckelordet Som . Du använder As bara en gång i början av listan. |
Kommentarer
Varje generiskt programmeringselement måste ha minst en typparameter. En typparameter är en platshållare för en specifik typ (ett konstruerat element) som klientkoden anger när den skapar en instans av den allmänna typen. Du kan definiera en allmän klass, struktur, gränssnitt, procedur eller ombud.
Mer information om när du ska definiera en allmän typ finns i Generiska typer i Visual Basic. Mer information om typparameternamn finns i Deklarerade elementnamn.
Regler
Parenteser. Om du anger en typparameterlista måste du omsluta den inom parenteser och du måste introducera listan med nyckelordet Av . Du använder
Of
bara en gång i början av listan.Begränsningar. En lista över begränsningar för en typparameter kan innehålla följande objekt i valfri kombination:
Valfritt antal gränssnitt. Den angivna typen måste implementera alla gränssnitt i den här listan.
Högst en klass. Den angivna typen måste ärva från den klassen.
Nyckelordet
New
. Den angivna typen måste exponera en parameterlös konstruktor som den allmänna typen kan komma åt. Detta är användbart om du begränsar en typparameter med ett eller flera gränssnitt. En typ som implementerar gränssnitt exponerar inte nödvändigtvis en konstruktor, och beroende på en konstruktors åtkomstnivå kanske koden inom den allmänna typen inte kan komma åt den.Antingen nyckelordet
Class
eller nyckelordetStructure
. NyckelordetClass
begränsar en allmän typparameter till att kräva att alla typargument som skickas till den är en referenstyp, till exempel en sträng, matris eller ombud eller ett objekt som skapats från en klass. NyckelordetStructure
begränsar en allmän typparameter till att kräva att alla typargument som skickas till den är en värdetyp, till exempel en struktur, uppräkning eller elementär datatyp. Du kan inte inkludera bådeClass
ochStructure
i sammaconstraintlist
.
Den angivna typen måste uppfylla alla krav som du inkluderar i
constraintlist
.Begränsningar för varje typparameter är oberoende av begränsningar för andra typparametrar.
Funktionssätt
Kompileringstidsersättning. När du skapar en konstruerad typ från ett allmänt programmeringselement anger du en definierad typ för varje typparameter. Visual Basic-kompilatorn ersätter den angivna typen för varje förekomst av
typename
i det generiska elementet.Avsaknad av begränsningar. Om du inte anger några begränsningar för en typparameter begränsas koden till de åtgärder och medlemmar som stöds av objektdatatypen för den typen av parameter.
Exempel 1
I följande exempel visas en skelettdefinition av en allmän ordlisteklass, inklusive en skelettfunktion för att lägga till en ny post i ordlistan.
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
Exempel 2
Eftersom dictionary
är allmän kan den kod som använder den skapa en mängd olika objekt från den, var och en har samma funktioner men agerar på en annan datatyp. I följande exempel visas en kodrad som skapar ett dictionary
objekt med String
poster och Integer
nycklar.
Dim dictInt As New dictionary(Of String, Integer)
Exempel 3
I följande exempel visas motsvarande skelettdefinition som genereras av föregående exempel.
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