2010-01-07 64 views
7

非常基本的問題,實例化泛型類型在C#類在C#

class Data<T> 
{ 
    T obj; 

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

我如何做到這一點?

+1

一個跟進的人誰是有興趣在this.This是C#泛型和C++模板之間的主要區別,我們要強加約束類型的編譯器識別該類型的任何屬性。請閱讀這 http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx#csharp_generics_topic4 – fadini 2010-01-10 20:38:54

回答

20

如果你想創建自己的T實例,那麼你需要定義一個約束new()

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

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

如果你想在obj的傳遞,那麼你需要允許它在構造函數中

class Data<T> 
    { 
     T obj; 

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

答案正是我一直在尋找!謝謝! – deanvmc 2010-01-07 23:24:56

0

您可以在泛型類定義中使用new constraint以確保T具有可以調用的默認構造函數。通過約束,您可以通知編譯器有關通用參數T必須遵守的某些行爲(功能)。

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

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