声明泛型类时new()的目的是什么?

时间:2011-02-18 21:25:34

标签: c# .net generics

在声明BaseEntityCollection类时new()的目的是什么? 如果我要删除它,我收到一个错误,出现以下消息“T必须是一个非抽象类型,带有一个公共无参数构造函数才能将它用作参数......”

public abstract partial class BaseEntityCollection<T> : 
       List<T> where T : BaseEntity, new()

7 个答案:

答案 0 :(得分:20)

这意味着无论您为T指定哪个类,它都有一个默认(无参数)构造函数。

因此,在泛型类中,您可以执行new T(),它将创建一个T类型的新对象。

答案 1 :(得分:4)

编写new()会强制参数具有默认构造函数。

没有它,你就不能写new T() 当您尝试将非new()类型作为new()'d参数传递时,会发生错误。


此外,do not inherit List<T>
相反,您应该继承Collection<T>,这是为继承而设计的。

答案 2 :(得分:1)

类型T必须具有无参数构造函数。这使您可以通过执行var t = new T()来创建新实例,否则这将是不可能的。

答案 3 :(得分:1)

这是泛型约束的表示法:必须具有(公共)无参数构造函数。

答案 4 :(得分:1)

这意味着您的泛型类型必须具有无参数构造函数。

BaseEntityCollection<T> : List<T>

我不确定你在这做什么,但我认为这是违反Liskov的规则。检查您的层次结构。

Constraints on Type Parameters

答案 5 :(得分:0)

这是您可以与通用类型关联的可能“泛型类型约束”之一。使用约束“new()”只允许您使用泛型类型(如果它具有无参数构造函数)。这对于序列化或工厂类型方法很有用,在这些方法中,您需要创建类型为T的对象。

以下是一些其他通用类型约束:http://msdn.microsoft.com/en-us/library/d5x73970(v=vs.80).aspx

答案 6 :(得分:0)

这是一个通用约束。在这种情况下,它是new Constraint