2010-01-07 5 views
7

Jolie question fondamentale en C#,Instantiate type générique dans la classe C#

class Data<T> 
{ 
    T obj; 

    public Data() 
    { 
     // Allocate to obj from T here 
     // Some Activator.CreateInstance() method ? 
     obj = ??? 
    } 
} 

Comment puis-je faire cela?

+1

Un suivi pour quelqu'un qui est intéressé par this.This est une différence majeure entre C# Generics et les modèles C de, nous devons imposer des contraintes sur les types pour le compilateur de reconnaître toutes les propriétés du type. S'il vous plaît lire ceci http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx#csharp_generics_topic4 – fadini

Répondre

20

Si vous voulez créer votre propre instance de T, alors vous devez définir une contrainte new()

class Data<T> where T: new() 
{ 
    T obj; 

    public Data() 
    { 
     obj = new T(); 
    } 
} 

Si vous voulez passer dans le obj alors vous devez lui permettre dans le constructeur

class Data<T> 
    { 
     T obj; 

     public Data(T val) 
     { 
      obj = val; 
     } 
    } 
+0

La réponse est exactement ce que je cherchais aussi! Merci! – deanvmc

0

Vous pouvez utiliser le new constraint dans votre définition de classe générique pour vous assurer que T a un constructeur par défaut que vous pouvez appeler. Les contraintes vous permettent d'informer le compilateur de certains comportements (capacités) auxquels le paramètre générique T doit adhérer.

class Data<T> where T : new() 
{ 
    T obj; 

    public Data() 
    { 
     obj = new T(); 
    } 
} 
Questions connexes