非常基本的問題,實例化泛型類型在C#類在C#
class Data<T>
{
T obj;
public Data()
{
// Allocate to obj from T here
// Some Activator.CreateInstance() method ?
obj = ???
}
}
我如何做到這一點?
非常基本的問題,實例化泛型類型在C#類在C#
class Data<T>
{
T obj;
public Data()
{
// Allocate to obj from T here
// Some Activator.CreateInstance() method ?
obj = ???
}
}
我如何做到這一點?
如果你想創建自己的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;
}
}
答案正是我一直在尋找!謝謝! – deanvmc 2010-01-07 23:24:56
您可以在泛型類定義中使用new
constraint以確保T具有可以調用的默認構造函數。通過約束,您可以通知編譯器有關通用參數T必須遵守的某些行爲(功能)。
class Data<T> where T : new()
{
T obj;
public Data()
{
obj = new T();
}
}
一個跟進的人誰是有興趣在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