2010-01-07 11 views
7
pregunta

bastante básico en C#,Instantiate tipo genérico en C# clase

class Data<T> 
{ 
    T obj; 

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

¿Cómo puedo hacer esto?

+1

un seguimiento a alguien que esté interesado en this.This es una diferencia importante entre C# genéricos y las plantillas de C++, tenemos que imponer restricciones sobre los tipos para el compilador de reconocer cualquier propiedad del tipo. Lea esto http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx#csharp_generics_topic4 – fadini

Respuesta

20

Si desea crear su propia instancia de T, entonces es necesario definir una restricción new()

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

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

Si desea pasar en el obj entonces usted necesita para permitir que en el constructor

class Data<T> 
    { 
     T obj; 

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

¡La respuesta es exactamente lo que estaba buscando también! ¡Gracias! – deanvmc

0

Puede usar el new constraint en su definición de clase genérica para asegurarse de que T tenga un constructor predeterminado al que pueda llamar. Las restricciones le permiten informar al compilador sobre ciertos comportamientos (capacidades) que el parámetro genérico T debe cumplir.

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

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