2013-09-22 41 views
4

如果我有一个类的声明像这样的:关键字`constructor`在类标题中的含义是什么?

MyCollection<T: TBaseCopyable, constructor> = class 

是什么关键字constructor吗?

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

+3

['有得read'](http://docwiki.embarcadero.com/RADStudio/XE4/en/ Constraints_in_Generics#Constructor_Constraints)之前有人用自己的话来回答这个问题。 – TLama

回答

3

这是一个generic constraint

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

这种特殊的约束是constructor constraint

A型参数可以由保留字“构造”的零个或一个实例的限制。这意味着实际的参数类型必须是定义默认构造函数的类(公共无参数构造函数),以便泛型类型中的方法可以使用参数类型的默认构造函数构造参数类型的实例,而无需了解参数键入它自己(没有最低基本类型要求)。

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


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

有一种公知的技术,其允许泛型容器实例成员,这里讨论:Generics constructor with parameter constraint?

相关问题