5

我想知道在定义泛型类时同时拥有“类”和“新()”约束是否有意义。如下例所示:

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

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

我的最后一个问题(公式化)是:像上面的陈述那样定义一个泛型类有什么好处,还是“new()”封装了这两个约束?

4

2 回答 2

7

new()并不意味着引用类型,因此:不,class在使用new().

以下代码演示了这一点:

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

struct S {}

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

这段代码可以编译,证明new()不管你是使用引用还是值类型。

于 2013-07-16T15:18:15.993 回答
1

不,它们不是没用的。

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

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

于 2013-07-16T15:26:45.817 回答