delphi - 在运行时获取类中的变量名称列表

标签 delphi

我在程序中声明了一些简单的类,例如

MyClass = class 
    Var1 : Integer
    Var2 : Integer
end;

我想做的是在运行时获取此类(“MyClass”)中的变量列表(也许类似于组件的“GetPropList”?)

我想到了这样的事情(显然,函数“GetVarNames”不存在,但我希望这能给出这个想法),它将把“MyClass”中列出的变量名称拉入 TStringList 中的字符串:

var
    MyVariableNamesList: TStringList
    i : integer;

begin
    MyVariableNamesList := TStringList.create;        
    MyVariableNamesList := GetVarNames(MyClass)

end;

有人可以建议吗?如果这是一个愚蠢的问题,请提前道歉!

最佳答案

根据您的 Delphi 版本,您可以使用新的 RTTI(在 Delphi 2010 中引入)。

你可以这样做:

function GetVarNames(const AClass : TObject) : TStringList;
var lType : TRttiType;
  lContext : TRttiContext;
  lProperty : TRttiProperty;
  lField : TRttiField;
begin
  Result := TStringList.create;
  LType := lContext.GetType(AClass.ClassType);
  if assigned(LType) then
  begin
    for LProperty in LType.GetProperties do
    begin
      Result.Add(lProperty.Name);
      //Get current value:
      Result.Add(lProperty.GetValue(AClass).ToString);
    end;
   for lField in LType.GetFields do
   begin
     Result.Add(lField.Name);
     //Get current value:
     Result.Add(lField.GetValue(AClass).ToString);
   end;
 end;
end;

关于delphi - 在运行时获取类中的变量名称列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10713555/

相关文章:

delphi - 将临时 AnsiString 或 UnicodeString 对象作为参数提供给函数总是安全的吗?

Delphi - 设置表单在显示时不关注任何组件

delphi - TMultiStringList 和 TString

delphi - 如何将记录的属性转换为整数并返回?

delphi - 如何跟踪 OLE 自动化对象的 _AddRef/_Release 调用

delphi - 在 Delphi 中创建 7zip 存档

java - Delphi 中有哈希数组吗?

delphi - indy ssl delphi 服务器

Delphi 表单所有者跳过组件 FormClose 中的 ShowMessage/Dialog 调用

delphi - 使用 IOmniTaskControl/TOmniWorker 时等待 Invoke 完成