我想定义三个基类,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类型参数&#39; T&#39;必须有一个名为Create
的公共无参数构造函数
问题是什么,我该如何解决?
答案 0 :(得分:4)
错误意味着编译器无法确定T是否满足要求。像这样声明派生类
TMyBaseClassReader<T: TMyBaseClass, constructor>