Mas*_*ler 9 delphi generics constructor delphi-2009
我创建了一个自定义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;
Run Code Online (Sandbox Code Playgroud)
我希望每个新列表都以一个空白对象开头.这很简单,对吧?但编译器不喜欢它.它说:
"无法在类型参数声明中创建没有CONSTRUCTOR约束的新实例"我只能假设这是与泛型相关的东西.任何人都知道发生了什么以及如何使这个构造函数工作?
Kon*_*lph 17
您正在尝试创建Tvia 的实例T.Create.这不起作用,因为编译器不知道您的泛型类型具有无参数构造函数(请记住:这不是必需的).要纠正这个问题,你必须创建一个构造函数约束,如下所示:
<T: constructor>
Run Code Online (Sandbox Code Playgroud)
或者,在您的具体情况下:
<T: TBaseDatafile, constructor>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3987 次 |
| 最近记录: |