在泛型类中同时具有“class”和“new()”约束是没有意义的吗?

时间:2013-07-16 15:15:40

标签: c# generics constraints

我想知道在定义泛型类时是否有“class”和“new()”约束是否合理。如下例所示:

class MyParanoidClass<T> where T : class, new()
{
 //content
}

两个约束都指定T应该是引用类型。虽然“类”约束并不意味着存在隐式构造函数,但“new()”约束确实需要带有附加公共构造函数定义的“类”。

我的最终(制定)问题是:在上面的语句中定义泛型类是否有任何好处,或者“new()”是否封装了两个约束?

2 个答案:

答案 0 :(得分:7)

new()并不意味着引用类型,因此:不,class在使用new()时不会多余。

以下代码演示了:

void Main()
{
    new MyParanoidClass<S>();
}

struct S {}

class MyParanoidClass<T> where T : new()
{
    //content
}

此代码编译,证明new()不关心您是否使用引用或值类型。

答案 1 :(得分:1)

不,他们没有用武之地。

第一个参数确保type参数必须是引用类型,包括任何类,接口,委托或数组类型,

而第二个参数 new()确保它的参数少于默认构造函数。它不适用于没有参数少的默认构造函数的任何类。