我想知道在定义泛型类时同时拥有“类”和“新()”约束是否有意义。如下例所示:
class MyParanoidClass<T> where T : class, new()
{
//content
}
两个约束都指定 T 应该是引用类型。虽然“类”约束并不意味着存在隐式构造函数,但“new()”约束确实需要具有附加公共构造函数定义的“类”。
我的最后一个问题(公式化)是:像上面的陈述那样定义一个泛型类有什么好处,还是“new()”封装了这两个约束?
我想知道在定义泛型类时同时拥有“类”和“新()”约束是否有意义。如下例所示:
class MyParanoidClass<T> where T : class, new()
{
//content
}
两个约束都指定 T 应该是引用类型。虽然“类”约束并不意味着存在隐式构造函数,但“new()”约束确实需要具有附加公共构造函数定义的“类”。
我的最后一个问题(公式化)是:像上面的陈述那样定义一个泛型类有什么好处,还是“new()”封装了这两个约束?
new()
并不意味着引用类型,因此:不,class
在使用new()
.
以下代码演示了这一点:
void Main()
{
new MyParanoidClass<S>();
}
struct S {}
class MyParanoidClass<T> where T : new()
{
//content
}
这段代码可以编译,证明new()
不管你是使用引用还是值类型。
不,它们不是没用的。
第一个参数类确保类型参数必须是引用类型,包括任何类、接口、委托或数组类型,
而第二个参数new()确保它具有无参数的默认构造函数。它不适用于任何没有无参数默认构造函数的类。