Как получить список классов, производных от данного класса, с помощью расширенного RTTI?

Мне нужно получить список типов форм, но только для типов, производных от данной базовой формы.

Я использую Delphi 2010 и расширенный RTTI для просмотра типов

Мой текущий код:

rc := TRTTIContext.Create;
rtyps := rc.GetTypes;
for rtyp in rtyps do
begin
  if not(rtyp.IsInstance) then Continue;

  // Now I need to check if rtyp.AsInstance.MetaclassType is derived from TMyBaseForm
end;

Я не хочу инстанцировать объект и использовать оператор 'is', так как он не будет выполняться своевременно.
В качестве текущего обходного пути я проверяю, найден ли метод, введенный в TMyBaseForm, в контексте RTTI:

if (rtyp.GetMethod('MyMethod') = nil) then Continue;

но это не чистое решение, так как оно может привести к проблеме, если метод с тем же именем был введен в другой ветке класса.

Итак, мой вопрос: есть ли обычный способ определить, является ли тип класса производным от другого типа класса?

Thanks,

13
задан user315561 8 December 2011 в 16:08
поделиться