Получить имя переменной с помощью 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?