Generics 带构造函数约束的delphi泛型
我尝试编译以下代码:Generics 带构造函数约束的delphi泛型,generics,delphi-xe7,Generics,Delphi Xe7,我尝试编译以下代码: TMyClass<T: class, constructor> = class(TObjectList<T>) public constructor Create; reintroduce; end; TConcretClass = class(TMyClass<TConcretClass>) public constructor Create; reintroduce; end; TConcretClass=class(TMy
TMyClass<T: class, constructor> = class(TObjectList<T>)
public
constructor Create; reintroduce;
end;
TConcretClass = class(TMyClass<TConcretClass>)
public
constructor Create; reintroduce;
end;
TConcretClass=class(TMyClass)
我不认为您的意思是,对于您声明的类,它是一个包含类型为自身的成员的列表。在任何情况下,编译器都会反对,因为TObjectList
有一个带有无法隐藏的参数的构造函数。编者说:
E2513类型参数“T”必须有一个名为Create的公共无参数构造函数
而TObjectList
无法满足该要求
我怀疑你想要的是更像这样的东西:
type
TMyClass<T: class, constructor> = class(TObjectList<T>)
end;
TListMemberClass = class(TObject)
end;
TConcreteClass = class(TMyClass<TListMemberClass>)
end;
类型
TMyClass=类(TObjectList)
结束;
TListMemberClass=类(ToObject)
结束;
TConcreteClass=类(TMyClass)
结束;
OK。正如您所问,我已经解释了编译器报告该错误的原因。你明白它为什么这样做吗?好的,为什么不编译这个代码:TNode=class public constructor Create;结束;TConcretNode=类(TNode)公共构造函数创建;结束;TConcretNode只有一个名为Create的公共无参数构造函数在这种情况下,TConcretNode
的定义不完整,编译器不知道TConcretNode
具有必要的质量。对于您提出的问题,还需要其他帮助吗?
TConcretClass = class(TMyClass<TConcretClass>)
type
TMyClass<T: class, constructor> = class(TObjectList<T>)
end;
TListMemberClass = class(TObject)
end;
TConcreteClass = class(TMyClass<TListMemberClass>)
end;