我有一个超类,我们可以调用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)