作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我制作了一个自定义 TObjectList 后代,旨在保存基对象类的子类。它看起来像这样:
interface
TMyDataList<T: TBaseDatafile> = class(TObjectList<TBaseDatafile>)
public
constructor Create;
procedure upload(db: TDataSet);
end;
implementation
constructor TMyDataList<T>.Create;
begin
inherited Create(true);
self.Add(T.Create);
end;
我希望每个新列表都以一个空白对象开始。这很简单,对吧?但编译器不喜欢它。它说:
“如果类型参数声明中没有 CONSTRUCTOR 约束,则无法创建新实例”我只能假设这是与泛型相关的东西。任何人都知道发生了什么事以及我如何使这个构造函数工作?
最佳答案
您正在尝试通过 T.Create
创建 T
的实例。这不起作用,因为编译器不知道您的泛型类型具有无参数构造函数(请记住:这不是必需的)。要纠正这个问题,您必须创建一个构造函数约束,如下所示:
<T: constructor>
或者,根据您的具体情况:
<T: TBaseDatafile, constructor>
关于delphi - 泛型:什么是 "CONSTRUCTOR constraint"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/383689/
我是一名优秀的程序员,十分优秀!