4

如果我有这样的类声明:

MyCollection<T: TBaseCopyable, constructor> = class

关键字constructor有什么作用?

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

4

1 回答 1

3

这是一个通用约束

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

这个特定的约束是构造函数约束

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

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


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

有一种众所周知的技术允许泛型容器实例化成员,这里讨论:具有参数约束的泛型构造函数?

于 2013-09-22T13:07:15.313 回答