C#create Object obj = new T()?

seh*_*rom 21 c# generics

我有一个超类,我们可以调用class A和几个子类,例如class a1 : A,class a2 : A......和a6 : A.在我看来class B,我有一组方法可以创建一个子类并将其添加到List<A>in中B.

我想缩短我目前的代码.所以不要写作

Adda1()
{
    aList.Add( new a1() );
}

Adda2()
{
    aList.Add( new a2() );
} 

...

Adda6()
{
    aList.Add( new a6() );
}
Run Code Online (Sandbox Code Playgroud)

相反,我想写一些与此相似的东西

Add<T>()
{
    aList.Add( new T() );  // This gives an error saying there is no class T.
}
Run Code Online (Sandbox Code Playgroud)

那可能吗?

是否也可以约束T必须是类型A或其子类之一?

Mar*_*ers 35

李的回答是正确的.

原因是为了能够调用new T()你需要new()为你的类型参数添加一个约束:

void Add<T>() where T : new()
{
     ... new T() ...
}
Run Code Online (Sandbox Code Playgroud)

您还需要一个约束,T : A以便可以将类型的对象添加T到a List<A>.

注意:当您new()与其他new()约束一起使用时,约束必须是最后的.

有关


Lee*_*Lee 28

public void Add<T>() where T : A, new()
{
    aList.Add(new T());
}
Run Code Online (Sandbox Code Playgroud)