【发布时间】:2013-07-16 23:47:24
【问题描述】:
我想知道在定义泛型类时同时拥有“class”和“new()”约束是否有意义。如下例:
class MyParanoidClass<T> where T : class, new()
{
//content
}
两个约束都指定 T 应该是一个引用类型。虽然“类”约束并不意味着存在隐式构造函数,但“new()”约束确实需要一个带有额外公共构造函数定义的“类”。
我的最后一个问题(公式化)是:像上面的语句那样定义一个泛型类有什么好处,还是“new()”封装了这两个约束?
【问题讨论】:
-
我不认为
new()强制引用类型,只是一个公共的无参数构造函数,值类型可以有(但我认为他们都有这个值类型,所以它几乎没有意义)。 -
@AdamHouldsworth:值类型总是有一个公共的无参数构造函数。这也不是没有意义的,因为
new()约束允许类内的代码通过new T()创建T的新实例。如果省略约束,这是不可能的。 -
@DanielHilgarth 是的,我继续这么说,但在毫无意义的一点上足够公平。但是,这可能与
default(T)相同。 -
@AdamHouldsworth:不,当然不是。
default(T)是null的引用类型。这与new T()非常不同,后者是一个新实例。 -
@DanielHilgarth 我指的是值类型。
标签: c# generics constraints