我制作了一个自定义 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
via T.Create
。这不起作用,因为编译器不知道您的泛型类型具有无参数构造函数(请记住:这不是必需的)。要纠正这个问题,您必须创建一个构造函数约束,如下所示:
<T: constructor>
或者,根据您的具体情况:
<T: TBaseDatafile, constructor>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)