Partager via


Liste de types (Visual Basic)

Spécifie les paramètres de type pour un élément de programmation générique. Les paramètres multiples sont séparés par des virgules. Voici la syntaxe d’un paramètre de type.

Syntaxe

[genericmodifier] typename [ As constraintlist ]

Éléments

Terme Définition
genericmodifier Optionnel. Peut être utilisé uniquement dans les interfaces et les délégués génériques. Vous pouvez déclarer un covariant de type à l’aide du mot clé Out ou du contravariant à l’aide du mot clé In. Consultez Covariance et contravariance.
typename Obligatoire. Nom du paramètre de type. Il s’agit d’un espace réservé, à remplacer par un type défini fourni par l’argument de type correspondant.
constraintlist Optionnel. Liste des exigences qui limitent le type de données qui peut être fourni pour typename. Si vous avez plusieurs contraintes, placez-les dans des accolades ({ }) et séparez-les par des virgules. Vous devez introduire la liste de contraintes avec le mot clé As. Vous n’utilisez As qu’une seule fois, au début de la liste.

Notes

Chaque élément de programmation générique doit prendre au moins un paramètre de type. Un paramètre de type est un espace réservé pour un type spécifique (un élément construit) que le code client spécifie lorsqu’il crée une instance du type générique. Vous pouvez définir une classe, une structure, une interface, une procédure ou un délégué générique.

Pour plus d’informations sur la définition d’un type générique, consultez Types génériques Visual Basic. Pour plus d’informations sur les noms de paramètres de type, consultez Noms d’éléments déclarés.

Règles

  • Parenthèses. Si vous fournissez une liste de paramètres de type, vous devez la placer entre parenthèses, et vous devez introduire la liste avec le mot clé Of. Vous n’utilisez Of qu’une seule fois, au début de la liste.

  • Contraintes. Une liste de contraintes sur un paramètre de type peut inclure les éléments suivants dans n’importe quelle combinaison :

    • N’importe quel nombre d’interfaces. Le type fourni doit implémenter chaque interface de cette liste.

    • Une classe au maximum. Le type fourni doit hériter de cette classe.

    • Le mot clé New. Le type fourni doit exposer un constructeur sans paramètre auquel votre type générique peut accéder. Cela est utile si vous limitez un paramètre de type par une ou plusieurs interfaces. Un type qui implémente des interfaces n’expose pas nécessairement un constructeur et, selon le niveau d’accès d’un constructeur, le code dans le type générique peut ne pas être en mesure d’y accéder.

    • Soit le mot clé Class, soit le mot clé Structure. Le mot clé Class contraint un paramètre de type générique à exiger que tout argument de type qui lui est passé soit un type référence, par exemple une chaîne, un tableau ou un délégué, ou un objet créé à partir d’une classe. Le mot clé Structurecontraint un paramètre de type générique à exiger que tout argument de type passé à celui-ci soit un type valeur, par exemple une structure, une énumération ou un type de données élémentaire. Vous ne pouvez pas inclure Class et Structure dans le même constraintlist.

    Le type fourni doit satisfaire toutes les exigences que vous incluez dans constraintlist.

    Les contraintes sur chaque paramètre de type sont indépendantes des contraintes sur les autres paramètres de type.

Comportement

  • Substitution au moment de la compilation. Lorsque vous créez un type construit à partir d’un élément de programmation générique, vous fournissez un type défini pour chaque paramètre de type. Le compilateur Visual Basic remplace ce type fourni pour chaque occurrence de typename dans l’élément générique.

  • Absence de contraintes. Si vous ne spécifiez aucune contrainte sur un paramètre de type, votre code est limité aux opérations et aux membres pris en charge par Object (type de données) pour ce paramètre de type.

Exemple 1

L’exemple suivant montre une définition de squelette d’une classe de dictionnaire générique, y compris une fonction de squelette pour ajouter une nouvelle entrée au dictionnaire.

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

Exemple 2

Puisque dictionary est générique, le code l’utilise peut créer une variété d’objets à partir de celui-ci, chacun ayant la même fonctionnalité, mais agissant sur un type de données différent. L’exemple suivant montre une ligne de code qui crée un objet dictionary avec des entrées String et des clés Integer.

Dim dictInt As New dictionary(Of String, Integer)

Exemple 3

L’exemple suivant montre la définition de squelette équivalente générée par l’exemple précédent.

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

Voir aussi