在声明BaseEntityCollection类时new()的目的是什么? 如果我要删除它,我收到一个错误,出现以下消息“T必须是一个非抽象类型,带有一个公共无参数构造函数才能将它用作参数......”
public abstract partial class BaseEntityCollection<T> :
List<T> where T : BaseEntity, new()
答案 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的规则。检查您的层次结构。
答案 5 :(得分:0)
这是您可以与通用类型关联的可能“泛型类型约束”之一。使用约束“new()”只允许您使用泛型类型(如果它具有无参数构造函数)。这对于序列化或工厂类型方法很有用,在这些方法中,您需要创建类型为T的对象。
以下是一些其他通用类型约束:http://msdn.microsoft.com/en-us/library/d5x73970(v=vs.80).aspx
答案 6 :(得分:0)
这是一个通用约束。在这种情况下,它是new Constraint。