Delphi 2010 と RTTI を使用して、オブジェクトのクラス タイプを取得する方法と、オブジェクトのプロパティの値とタイプを取得/設定する方法を知っていますが、プロパティが継承チェーンのどのクラスから来たかをどのように判断しますか? 基本クラスのプロパティをメイン クラスとは異なる方法で使用したいと考えています。
次のコードを検討してください。
TClassBase = class(TObject)
published
property A: Integer;
end;
TClassDescendant = class(TClassBase)
published
property B: Integer;
end;
procedure CheckProperties(Obj: TObject);
var
ctx: TRttiContext;
objType: TRttiType;
Prop: TRttiProperty;
begin
ctx := TRttiContext.Create;
objType := ctx.GetType(Obj.ClassInfo);
for Prop in objType.GetProperties do begin
if Prop.GetClassType is TClassBase then
// do something special with base class properties
else
// standard functionality on all other properties
end;
end;
問題は、プロパティの GetClassType がないことです。ClassType は、プロパティが属するクラスの名前ではなく、TRttiInstancePropertyEx を返すだけです。