关键字`constructor`在类标题中的含义是什么?

时间:2013-09-22 12:51:10

标签: delphi generics

如果我有类似这样的类声明:

MyCollection<T: TBaseCopyable, constructor> = class

关键字constructor的作用是什么?

是不是每个类都有一个构造函数,它在那里做什么?

1 个答案:

答案 0 :(得分:3)

这是generic constraint

  

约束可以与泛型的类型参数相关联。约束声明在泛型类型的构造中传递给该参数的任何特定类型必须支持的项。

这个特殊约束是constructor constraint

  

类型参数可以由保留字“构造函数”的零个或一个实例约束。这意味着实际参数类型必须是定义默认构造函数(公共无参数构造函数)的类,因此泛型类型中的方法可以使用参数类型的默认构造函数构造参数类型的实例,而不知道有关参数的任何信息键入自身(没有最低基本类型要求)。

     

在约束声明中,您可以将“构造函数”以任何顺序与接口或类类型约束混合。


在我看来,这是一个很大程度上无用的功能。每次我编写一个希望实例化成员的通用容器类时,我发现我需要能够将参数传递给构造函数。我完全不知道为什么这个特征存在于这种残缺的形式中。

有一种众所周知的技术允许通用容器实例化成员,如下所述:Generics constructor with parameter constraint?