我想知道在定义泛型类时是否有“class”和“new()”约束是否合理。如下例所示:
class MyParanoidClass<T> where T : class, new()
{
//content
}
两个约束都指定T应该是引用类型。虽然“类”约束并不意味着存在隐式构造函数,但“new()”约束确实需要带有附加公共构造函数定义的“类”。
我的最终(制定)问题是:在上面的语句中定义泛型类是否有任何好处,或者“new()”是否封装了两个约束?
答案 0 :(得分:7)
new()
并不意味着引用类型,因此:不,class
在使用new()
时不会多余。
以下代码演示了:
void Main()
{
new MyParanoidClass<S>();
}
struct S {}
class MyParanoidClass<T> where T : new()
{
//content
}
此代码编译,证明new()
不关心您是否使用引用或值类型。
答案 1 :(得分:1)
不,他们没有用武之地。
第一个参数类确保type参数必须是引用类型,包括任何类,接口,委托或数组类型,
而第二个参数 new()确保它的参数少于默认构造函数。它不适用于没有参数少的默认构造函数的任何类。