gpt4 book ai didi

delphi - 泛型:什么是 "CONSTRUCTOR constraint"?

转载 作者:行者123 更新时间:2023-12-03 14:42:51 26 4
gpt4 key购买 nike

我制作了一个自定义 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com