gpt4 book ai didi

delphi - 如何使用构造函数约束定义泛型列表类型的参数?

转载 作者:行者123 更新时间:2023-12-03 19:25:01 25 4
gpt4 key购买 nike

我想定义三个基类,TMyBaseClass保存数据,TMyBaseClassList包含 TMyBaseClass 的实例列表, 和 TMyBaseClassReader滚动数据集并填充 TMyBaseClassList目的。这是我的代码:

  TMyBaseClass = class
public
// properties
constructor Create;
end;

TMyBaseClassList<T: TMyBaseClass, constructor> = class(TObjectList<TMyBaseClass>)
public
function AddNew: T;
end;

TMyBaseClassReader<T: TMyBaseClass> = class
public
class procedure ReadProperties(const DataSet: TCustomADODataSet;
const Item: T); virtual; abstract;
class procedure ReadDataSet(const DataSet: TCustomADODataSet;
const List: TMyBaseClassList<T>);// <- E2513
end;

...

constructor TMyBaseClass.Create;
begin
inherited;
end;

function TMyBaseClassList<T>.AddNew: T;
begin
Result := T.Create;
Add(Result);
end;

class procedure TMyBaseClassReader<T>.ReadDataSet;
var
NewItem: T;
begin
while not DataSet.Eof do
begin
NewItem := List.AddNew;
ReadProperties(DataSet, NewItem);
DataSet.Next;
end;
end;

然后我想派生子类,只实现 ReadProperties方法。但我收到 E2513 错误:

E2513 Type parameter 'T' must have one public parameterless constructor named Create



有什么问题,我该如何解决?

最佳答案

该错误意味着编译器无法确定 T 是否满足要求。像这样声明派生类

TMyBaseClassReader<T: TMyBaseClass, constructor>

关于delphi - 如何使用构造函数约束定义泛型列表类型的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45640965/

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