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