Delphi RTTI :Получить класс свойства

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

5
задан Sertac Akyuz 5 July 2012 в 20:34
поделиться