Partager via


Vue d'ensemble des génériques dans le .NET Framework

Mise à jour : novembre 2007

Cette rubrique présente les génériques dans le .NET Framework et résume les types ou méthodes génériques. Elle définit également la terminologie relative aux génériques.

Définition et utilisation de génériques

Les génériques sont des classes, des structures, des interfaces et des méthodes qui possèdent des espaces réservés (paramètres de type) pour un ou plusieurs des types qu'ils stockent ou utilisent. Une classe de collection générique peut utiliser un paramètre de type comme espace réservé du type d'objets qu'elle stocke ; les paramètres de type se présentent comme les types de ses champs et les types de paramètre de ses méthodes. Une méthode générique peut utiliser son paramètre de type en tant que type de sa valeur de retour ou en tant que type de l'un de ses paramètres formels. Le code suivant illustre une définition de classe générique simple.

Public Class Generic(Of T)
    Public Field As T
End Class
public class Generic<T> 
{
    public T Field;
}
generic<typename T> public ref class Generic 
{
public:
    T Field;
};

Lorsque vous créez une instance d'une classe générique, vous spécifiez les types à substituer aux paramètres de type. Vous créez ainsi une nouvelle classe générique, désignée par le terme « classe générique construite », les types que vous avez choisis étant substitués là où les paramètres de type apparaissent. Le résultat est une classe de type sécurisé qui est adaptée à votre choix de types, comme l'illustre le code suivant.

Dim g As New Generic(Of String)
g.Field = "A string"
Generic<string> g = new Generic<string>();
g.Field = "A string";
Generic<String^>^ g = gcnew Generic<String^>();
g->Field = "A string";

Terminologie des génériques

La terminologie utilisée pour les génériques dans le .NET Framework est la suivante :

  • Une définition de type générique est une déclaration de classe, de structure ou d'interface qui fonctionne comme un modèle, avec des espaces réservés pour les types qu'elle peut contenir ou utiliser. Par exemple, la classe Dictionary<TKey, TValue> peut contenir deux types : des clés et des valeurs. Dans la mesure où il s'agit simplement d'un modèle, vous ne pouvez pas créer des instances d'une classe, d'une structure ou d'une interface qui représente une définition de type générique.

  • Les paramètres de type générique, ou paramètres de type, représentent les espaces réservés dans une définition de type ou de méthode générique. Le type générique Dictionary<TKey, TValue> possède deux paramètres de type, TKey et TValue, qui représentent les types de ses clés et de ses valeurs.

  • Un type générique construit, ou type construit, est le résultat de la spécification de types pour les paramètres de type générique d'une définition de type générique.

  • Un argument de type générique représente tout type substitué à un paramètre de type générique.

  • Le terme général « type générique » comprend à la fois des types construits et des définitions de type générique.

  • Les contraintes sont des limites placées sur les paramètres de type générique. Par exemple, vous pouvez limiter un paramètre de type aux types qui implémentent l'interface générique IComparer<T>, pour garantir que les instances du type puissent être classées. Vous pouvez également limiter les paramètres de type à des types possédant une classe de base particulière, un constructeur par défaut ou représentant des types référence ou des types valeur. Les utilisateurs du type générique ne peuvent pas substituer les arguments de type qui ne respectent pas les contraintes.

  • Une définition de méthode générique est une méthode avec deux listes de paramètres : une liste des paramètres de type générique et une liste des paramètres formels. Les paramètres de type peuvent apparaître sous la forme du type de retour ou des types des paramètres formels, comme l'illustre le code suivant.

    Function Generic(Of T)(ByVal arg As T) As T
        Dim temp As T = arg
        ...
    End Function
    
    T Generic<T>(T arg) { T temp = arg; ...}
    
    generic<typename T> T Generic(T arg) { T temp = arg; ...};
    

    Les méthodes génériques peuvent apparaître sur des types génériques ou non génériques. Il est important de noter qu'une méthode n'est pas générique simplement en raison de son appartenance à un type générique, ou encore parce qu'elle a des paramètres formels dont les types sont les paramètres génériques du type englobant. Une méthode est générique uniquement si elle possède sa propre liste de paramètres de type. Dans le code suivant, seule la méthode G est générique.

    Class A
        Function G(Of T)(ByVal arg As T) As T
            ...
        End Function
    End Class
    Class Generic(Of T)
        Function M(ByVal arg As T) As T
            ...
        End Function
    End Class
    
    class A 
    {
        T G<T>(T arg) {...}
    }
    class Generic<T> 
    {
        T M(T arg) {...}
    }
    
    ref class A 
    {
        generic<T> T G(T arg) {...};
    };
    generic<typename T> ref class Generic 
    {
        T M(T arg) {...};
    };
    

Visual C++, C# et Visual Basic fournissent tous trois une prise en charge complète de la définition et de la consommation des génériques. Pour plus d'informations, consultez Types génériques en Visual Basic, Introduction aux génériques (Guide de programmation C#) et Overview of Generics in Visual C++.

Types imbriqués et génériques

Un type imbriqué dans un type générique peut dépendre des paramètres de type du type générique englobant. Le Common Language Runtime considère les types imbriqués comme étant génériques, même s'ils ne possèdent pas leurs propres paramètres de type générique. Lorsque vous créez une instance d'un type imbriqué, vous devez spécifier des arguments de type pour tous les types génériques englobants.

Voir aussi

Tâches

Comment : définir un type générique avec émission de réflexion

Concepts

Quand utiliser les collections génériques

Types génériques en Visual Basic

Overview of Generics in Visual C++

Collections génériques dans le .NET Framework

Délégués génériques pour la manipulation de tableaux et de listes

Interfaces génériques

Avantages et limitations des génériques

Référence

System.Collections.Generic

System.Collections.ObjectModel

Introduction aux génériques (Guide de programmation C#)

Autres ressources

Types de collections couramment utilisés

Réflexion et types génériques

Génériques dans le .NET Framework