Dela via


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 nyckelordet Structure . Nyckelordet Class 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. Nyckelordet Structure 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åde Class och Structure i samma constraintlist.

    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

Se även