Partager via


where (contrainte de type générique) (Référence C#)

Dans une définition de type générique, la clause where permet de spécifier des contraintes sur les types qui peuvent être utilisés comme arguments pour un paramètre de type défini dans une déclaration générique. Vous pouvez, par exemple, déclarer une classe générique, MyGenericClass, telle que le paramètre de type T implémente l'interface IComparable :

public class MyGenericClass<T> where T:IComparable { }

Notes

Pour plus d'informations sur la clause where dans une expression de requête, consultez where, clause (Référence C#).

Outre les contraintes d'interface, une clause where peut contenir une contrainte de classe de base qui déclare qu'un type doit avoir la classe spécifiée en tant que classe de base (ou être cette classe) pour être utilisé comme un argument de type pour ce type générique. Si une telle contrainte est utilisée, elle doit apparaître avant toute autre contrainte pesant sur ce paramètre de type.

class MyClass<T, U>
    where T : class 
    where U : struct
{ }

La clause where peut également inclure une contrainte de constructeur. Il est possible de créer une instance d'un paramètre de type à l'aide de l'opérateur new ; toutefois, il faut que le paramètre de type soit contraint par la contrainte du constructeur, new(). La contrainte new() fait savoir au compilateur que tout argument de type fourni doit avoir un constructeur accessible sans paramètre, ou par défaut. Par exemple :

public class MyGenericClass<T> where T : IComparable, new()
{
    // The following line is not possible without new() constraint:
    T item = new T();
}

La contrainte new() apparaît en dernier dans la clause where.

Avec plusieurs paramètres de type, utilisez une clause where pour chaque paramètre de type, par exemple :

interface IMyInterface
{
}

class Dictionary<TKey, TVal>
    where TKey : IComparable, IEnumerable
    where TVal : IMyInterface
{
    public void Add(TKey key, TVal val)
    {
    }
}

Vous pouvez également joindre des contraintes aux paramètres de type des méthodes génériques, comme ceci :

public bool MyMethod<T>(T t) where T : IMyInterface { }

Remarquez que la syntaxe décrivant les contraintes de paramètre de type sur les délégués est la même que celle des méthodes :

delegate T MyDelegate<T>() where T : new()

Pour plus d'informations sur les délégués génériques, consultez Délégués génériques.

Pour plus d'informations sur la syntaxe et l'utilisation de contraintes, consultez Contraintes sur les paramètres de type.

Spécification du langage C#

Pour plus d'informations, voir la Spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.

Voir aussi

Référence

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

new, contrainte (référence C#)

Contraintes sur les paramètres de type (Guide de programmation C#)

Concepts

Guide de programmation C#

Autres ressources

Référence C#