Necesito obtener una lista de tipos de formularios, pero solo para los tipos derivados de una base determinada.¿Cómo obtener la lista de clases derivadas de una clase determinada, con RTTI mejorado?
utilizo Delphi 2010 y mejorada RTTI para navegar tipos
Mi código actual es:
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;
no quiero instanciar un objeto y utilizar el operador 'es', ya que no se ejecutaría de una manera oportuna.
Como solución actual, que prueba si un método, introducido en TMyBaseForm, se encontró en el contexto de RTTI:
if (rtyp.GetMethod('MyMethod') = nil) then Continue;
pero esto no es una solución limpia, ya que puede conducir a la cuestión si un método con el el mismo nombre fue introducido en otra rama de clase.
Por lo tanto, mi pregunta: ¿hay una manera regular de detectar si un tipo de clase se deriva de otro tipo de clase?
Gracias,
No sé cómo implementarlo usando RTTI, pero está la función [ClassParent] (http://docwiki.embarcadero.com/VCL/en/System.TObject.ClassParent). Devuelve el tipo del antecesor inmediato de una clase. O si necesita averiguar si un tipo de clase u objeto en particular es una instancia de una clase o uno de sus descendientes, use [InheritsFrom] (http://docwiki.embarcadero.com/VCL/en/System.TObject.InheritsFrom) función. – TLama