Как да получите поле за достъп в Delphi с помощта на RTTI?

Помислете за следното:

TFieldType = class
  fValue: string;
end;

TMainClass = class
private
  Ffield: TFieldType;
public
  function GetValue: string;
end;

В TMainClass.GetValue се опитвам да получа стойности на полета на TMainClass:

function TMainClass.GetValue;
begin
  vCtx := TRTTIContext.Create;
  vType := vCtx.GetType(Self.ClassInfo);
  for vField in vType.GetFields do
    vField.GetValue(
        //Here's the trouble, because i don't know how to get the instance
    );

Може би има други начини за получаване на стойности на полета, които са екземпляри на други класове?


person boombastic    schedule 12.10.2009    source източник


Отговори (1)


Трябва да предадете екземпляра като параметър на GetValue като

vField.GetValue(self);

За по-добро разбиране на Rtti прочетете забележителни статии за RTTI от Робърт Лав. За този проблем специално този за Свойства и полета.

person Heinz Z.    schedule 12.10.2009
comment
Благодаря много, прочетох тези статии, но изглежда не толкова внимателно. Вашият отговор разреши проблема ми. - person boombastic; 12.10.2009