Получить имя переменной с помощью RTTI

Я пытаюсь получить имя переменной, используя RTTI, как это.

вот мой тест.

type
  TStringHelper = record helper for string
    function Name: string;
  end;

  TMyRecord = record
    Field1:string;
  end;

implementation

{ TStringHelper }
function TStringHelper.Name: string;
var
 context : TRttiContext;
begin
 context := TRttiContext.Create;
 result := context.GetType(@Self).Name; // return empty
 context.Free;
end;

procedure TForm2.FormCreate(Sender: TObject);
var
 r : TMyRecord;
begin
  ShowMessage(r.Field1.Name);
end;

имя возвращаемого TRttiType пусто.

есть ли способ получить имя переменной ?

1 ответов


RTTI дает информацию о типах, а не о переменных. В общем случае нет способа, используя RTTI, учитывая адрес переменной, найти ее имя.

не только RTTI не помогает, Но то, что вы пытаетесь, как метод строкового объекта, на самом деле невозможно. Представьте себе сценарий, в котором у вас есть две переменные, ссылающиеся на один и тот же объект.

S := 'foo';
T := S;

Как зовут одного объекта строки. Это S или T?