23

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

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

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

那可能吗?

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

4

2 回答 2

40

李的回答是正确的。

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

void Add<T>() where T : new()
{
     ... new T() ...
}

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

注意:new()与其他约束一起使用时,new()约束必须放在最后

有关的

于 2012-06-27T20:39:09.643 回答
32
public void Add<T>() where T : A, new()
{
    aList.Add(new T());
}
于 2012-06-27T20:39:16.407 回答