这已被问过几种不同的方式 - 但我还没有找到答案.
有人可以为我澄清一些事情.使用:Delphi XE2
我有一个很大的BaseObject,几乎用于所有东西.与它一起,我有一个通用列表 - BaseList.
延迟是这样的:
TBaseObject = class
... a lot of properties and methods ...
end;
TBaseList<T: TBaseObject> = class(TObjectList<T>)
... some properties and methods ...
end;
Run Code Online (Sandbox Code Playgroud)
我最近尝试使用Objects []属性将TBaseList声明从一个非常旧的TStringList更改为这个永远不会更通用的泛型列表TObjectList.
但是我遇到了一些问题.BaseUnit是一个文件......每次我下载我的BaseObject时,我都会制作一个专门的列表来跟随它.
所以我会去做类似的事情:
TCustomer = class(TBaseObject)
... customer related stuff ...
end;
TCustomerList<T: TCustomer> = class(TBaseList<T>)
... customer list specific stuff ...
end;
Run Code Online (Sandbox Code Playgroud)
但是现在我希望一个对象包含一个列表 - 它可以容纳任何对象.我想我可以这样做
TControlObject = class(TBaseobject)
FGenList: TBaseList<TBaseObject>;
end;
Run Code Online (Sandbox Code Playgroud)
由于BaseList和BaseObject是我的层次结构的顶层,我假设这样的List能够保存我能想到的任何列表.
但我有一种感觉,就是在这里,我失败了...一种TBaseList<TBaseobject>在某种程度上无法与TCustomerList<TCustomer>...... 相提并论......即使TCustomerList并且TCustomer是我的基地的后代.
我希望能够在baselist中使用泛型来实现新对象的安装.即.使用T.Create在populate方法.
以下是完整层次结构的示例: …