2011-10-19 2 views

Répondre

7

Ajouter une contrainte new:

class Request<T> where T : new() { 
    private T sw; 

    public void Request() { 
     sw = new T(); 
    } 
} 

Cela indique au compilateur que T aura toujours un constructeur accessible parameterless (non, vous ne pouvez pas spécifier tout autre type de constructeur).

+0

Merci pour cette réponse correcte et rapide. – Racooon

5

Vous devez déclarer la contrainte where T : new() dans la déclaration de classe. Cela limite T aux types avec un constructeur public par défaut. Par exemple:

class Request<T> where T : new() 
{ 
    private T sw; 

    public Request() 
    { 
     sw = new T(); 
    } 
} 

Plus d'informations: http://msdn.microsoft.com/en-us/library/d5x73970.aspx

+0

Merci, un exemple serait très utile. – Racooon

+0

@VuralAcar - Pas de problème, mis à jour avec l'exemple. –

5

Vous devez dire au compilateur que T implémente toujours un constructeur sans paramètre.

class Request<T> where T : new() 
+0

"un constructeur par défaut" – BoltClock

+0

@BoltClock: un constructeur sans paramètre peut-être? constructeur nul? Quel est le meilleur mot ici? – Jimmy