我有一个超类,我们可以调用class A
和几个子类,例如class a1 : A
,class a2 : A
,...和a6 : A
。在我的class B
中,我有一组方法可以创建一个子类并将其添加到List<A>
中的B
。
我想缩短我目前的代码。所以不要写
Adda1()
{
aList.Add( new a1() );
}
Adda2()
{
aList.Add( new a2() );
}
...
Adda6()
{
aList.Add( new a6() );
}
相反,我想写一些与此相似的内容
Add<T>()
{
aList.Add( new T() ); // This gives an error saying there is no class T.
}
这可能吗?
是否也可以约束T
必须是A
类型或其子类之一?
答案 0 :(得分:35)
原因是,为了能够调用new T()
,您需要在类型参数中添加new()
约束:
void Add<T>() where T : new()
{
... new T() ...
}
您还需要约束T : A
,以便将T
类型的对象添加到List<A>
。
注意:当您将new()
与其他约束一起使用时,new()
约束必须最后。
相关强>
答案 1 :(得分:26)
public void Add<T>() where T : A, new()
{
aList.Add(new T());
}