C#create Object obj = new T()?

时间:2012-06-27 20:37:05

标签: c# generics

我有一个超类,我们可以调用class A和几个子类,例如class a1 : Aclass 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类型或其子类之一?

2 个答案:

答案 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());
}