使用RTTI获取变量名称

时间:2016-11-02 06:53:04

标签: delphi 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 个答案:

答案 0 :(得分:7)

RTTI提供有关类型的信息,而不是有关变量的信息。通常,在给定变量地址的情况下,使用RTTI无法找到其名称。

RTTI不仅没有帮助,而且您尝试的作为字符串对象的方法实际上是不可能的。想象一下,有两个变量引用同一个对象的场景。

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

此处单个字符串对象的名称是什么。是S还是T?