Delphi如何在运行时获取一个类中所有变量名的列表?

2026-04-10 03:012阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计325个文字,预计阅读时间需要2分钟。

Delphi如何在运行时获取一个类中所有变量名的列表?

我在程序中声明了一些简单的类,例如 `MyClass=class Var1: Integer, Var2: Integer end;` 我想在运行时获取此类(MyClass)的变量列表(可能类似于组件的GetPropList)。我想知道如何实现这件事?

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

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中引入).

你可以这样做:

Delphi如何在运行时获取一个类中所有变量名的列表?

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;

标签:

本文共计325个文字,预计阅读时间需要2分钟。

Delphi如何在运行时获取一个类中所有变量名的列表?

我在程序中声明了一些简单的类,例如 `MyClass=class Var1: Integer, Var2: Integer end;` 我想在运行时获取此类(MyClass)的变量列表(可能类似于组件的GetPropList)。我想知道如何实现这件事?

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

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中引入).

你可以这样做:

Delphi如何在运行时获取一个类中所有变量名的列表?

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;

标签: