C# Language Contraintes de type (new-mot-clé)


Exemple

En utilisant la contrainte new() , il est possible d'imposer des paramètres de type pour définir un constructeur vide (par défaut).

class Foo
{
    public Foo () { }
}

class Bar
{
    public Bar (string s) { ... }
}

class Factory<T>
    where T : new()
{
    public T Create()
    {
        return new T();
    }
}

Foo f = new Factory<Foo>().Create(); // Valid.
Bar b = new Factory<Bar>().Create(); // Invalid, Bar does not define a default/empty constructor.

Le deuxième appel à Create() donnera une erreur de compilation avec le message suivant:

'Bar' doit être un type non abstrait avec un constructeur public sans paramètre afin de l'utiliser comme paramètre 'T' dans le type générique ou la méthode 'Factory'

Il n'y a pas de contrainte pour un constructeur avec des paramètres, seuls les constructeurs sans paramètre sont pris en charge.