我上课了

TMyAwesomeList = class(TObjectList)


持有

 TAwesomeItem = class(TPersistent)


其中TAwesomeItem几乎是一个抽象类

 TAwesomeItem1 = class(TAwesomeItem)
 TAwesomeItem2 = class(TAwesomeItem)
 TAwesomeItem3 = class(TAwesomeItem)
 TAwesomeItem3a = class(TAwesomeItem3)


等等(大约30个子类,其中有一些中间抽象类)完成了我一年前实现的一些对象关系建模,以期最终从Delphi 7转换到2009(以及不久的XE2)。

该代码在Delphi 2009中仍然有效,但是我想

 for AwesomeItem3a in AwesomeList do
 begin
    //something awesome
 end;


而且我不知道如何重新构造TMyAwesomeList(或添加几个子类)以使其工作。

最佳答案

根据您的评论,您似乎可以直接使用TObjectList

var
  MyAwesomeList1: TObjectList<TMyAwesomeItem1>;
  MyAwesomeItem1: TMyAwesomeItem1;
begin
  MyAwesomeList1 := TObjectList<TMyAwesomeItem1>.Create;
  try
    // populate the list...

    for MyAwesomeItem1 in MyAwesomeList1 do
      ...
  finally
    MyAwesomeList1.Free;
  end;
end;


...和TMyAwesomeItem2等相同
如果愿意,还可以声明类型别名:

type
  TMyAwesomeList1 = TObjectList<TMyAwesomeItem1>;
  TMyAwesomeList2 = TObjectList<TMyAwesomeItem2>;
  // etc.

10-06 09:36