Paramètres de type générique (Guide de programmation C#)

Mise à jour : novembre 2007

Dans un type ou une méthode générique, les paramètres de type représentent un espace réservé pour un type spécifique qu'un client spécifie quand il instancie une variable du type générique. Une classe générique, telle que GenericList<T> répertoriée dans Introduction aux génériques (Guide de programmation C#), ne peut pas être utilisée en l'état car il ne s'agit pas vraiment d'un type ; c'est plus comme un plan pour un type. Pour utiliser GenericList<T>, le code client doit déclarer et instancier un type construit en spécifiant un argument de type à l'intérieur de crochets. L'argument de type pour cette classe particulière peut être tout type reconnu par le compilateur. Il est possible de créer un nombre quelconque d'instances de type construit, chacun à l'aide d'un argument de type différent, comme suit :

GenericList<float> list1 = new GenericList<float>();
GenericList<ExampleClass> list2 = new GenericList<ExampleClass>();
GenericList<ExampleStruct> list3 = new GenericList<ExampleStruct>();

Dans chacun de ces instances de GenericList<T>, chaque occurrence de T dans la classe sera substituée au moment de l'exécution avec l'argument de type. Par cette substitution, nous avons créé trois objets distincts de type sécurisé et efficaces à l'aide d'une seule définition de classe. Pour plus d'informations sur la façon dont cette substitution est exécutée par le CLR, consultez Génériques dans le runtime (Guide de programmation C#).

Indications concernant l'attribution d'un nom aux paramètres de type

  • Nommez les paramètres de type générique avec des noms descriptifs, sauf si un nom composé d'une seule lettre est explicite et un nom descriptif n'ajouterait pas de valeur.

    public interface ISessionChannel<TSession> { /*...*/ }
    public delegate TOutput Converter<TInput, TOutput>(TInput from);
    public class List<T> { /*...*/ }
    
  • Envisagez l'utilisation de T comme nom de paramètre de type pour les types ayant un paramètre de type d'une seule lettre.

    public int IComparer<T>() { return 0; }
    public delegate bool Predicate<T>(T item);
    public struct Nullable<T> where T : struct { /*...*/ }
    
  • Préfixez les noms des paramètres de type descriptifs avec "T".

    public interface ISessionChannel<TSession>
    {
        TSession Session { get; }
    }
    
  • Pensez à indiquer les contraintes placées sur un paramètre de type dans le nom de paramètre. Par exemple, un paramètre contraint à ISession peut être appelé TSession.

Voir aussi

Concepts

Guide de programmation C#

Référence

Génériques (Guide de programmation C#)

Différences entre les templates C++ et les génériques C# (Guide de programmation C#)

System.Collections.Generic