Bueno, actualicé eso que veníamos hablando en el otro hilo de las VMT y actualicé el RTTIUtils.pas y lo subí al FTP (en Delphi-Win32/Recursos):
http://www.terawiki.clubdelphi.com/a.../RttiUtils.zip
Bueno, además de lo que estaba, le agregué una función que salió de esta conversación. Es la siguiente:
function IsOverrideMethod(AClass, Ancestor: TClass; MethodIndex: Integer ): boolean;
Adentro se chequea que los argumentos sean válidos y luego Itera por la jerarquía de herencias...
mmmm..... ahora que lo pienso a lo mejor está de más eso...
no sé... bué... ya está, luego veremos.
Ejemplo de Uso:
Código Delphi
[-]
TPadre = class (TObject)
procedure a; virtual; abstract;
procedure b; virtual;
end;
THijoA = class (TPadre)
procedure a; override;
end;
THijoB = class (TPadre)
procedure b; override;
end;
THijoC = class (THijoB)
procedure a; override;
procedure b; override;
end;
THijoD = class (THijoC)
end;
THijoE = class (TPadre)
end;
THijoF = class (THijoD)
procedure a; override;
end;
THijoG = class (THijoE)
end;
THijoH = class (THijoG)
end;
implementation
uses
rttiutils;
procedure TPadre.b;
begin
end;
procedure THijoA.a;
begin
end;
procedure THijoB.b;
begin
end;
procedure THijoC.a;
begin
end;
procedure THijoC.b;
begin
end;
procedure THijoF.a;
begin
end;
procedure check(AClass: TClass);
begin
if IsOverrideMethod(AClass,TPadre,0) then
Showmessage(Aclass.ClassName + ': Index 0 = Override!');
if IsOverrideMethod(AClass,TPadre,1) then
Showmessage(Aclass.ClassName + ': Index 1 = Override!');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Check(THijoA);
Check(THijoB);
Check(THijoC);
Check(THijoD);
Check(THijoE);
Check(THijoF);
Check(THijoG);
Check(THijoH);
end;
Se escuchan comentarios, sugerencias y derivadas