Преобразование предка TObjectList в универсальную коллекцию в Delphi - PullRequest
3 голосов
/ 16 ноября 2011

У меня есть класс

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 (или добавить несколько подклассов), чтобы это работало.

1 Ответ

7 голосов
/ 16 ноября 2011

Судя по вашим комментариям, вы можете просто использовать 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.
...