【问题标题】:How get property name from instance class如何从实例类中获取属性名称
【发布时间】:2019-01-31 12:58:49
【问题描述】:

我需要从对象类中获取属性名称作为字符串。在Delphi中可以吗?

我需要属性传输作为方法的参数,并将属性名称作为字符串。我不想使用属性名称作为参数,因为在类中更改属性名称时编译器不会捕获错误。

type
  TMyClass = class
  private
    fField: some_type;
  public
    property Field:some_type read fField;
  end;

function GetPropertyName(arg: ??):string
begin
  Result := arg.PropertyName; // here I need get property name form transfer type
end;

var
  obj: TMyClass;
  name: string;
begin
  name := GetPropertyName(obj.Field);  
end;

为了澄清,正如 cmets 中所讨论的,我正在寻找与 C# nameof 函数直接等效的函数。

【问题讨论】:

  • 对不起,我完全看不懂这个问题。您希望将什么值写入name
  • 您的属性Field 的名称是Field。如果您搜索其他内容,请更好地描述您的问题
  • 抱歉,我需要获取属性名称作为字符串。方法 GetPropertyName(obj.Field) 必须返回字符串 'Field',而不是 fField 的值
  • 老兄,你要求的东西是不可能的。如果需要名称,则需要传递名称。您可以使用 RTTI 来读取属性值。但正如所问,这是不可能的。
  • 我建议使用 RTTI 来遍历所有可用的字段、方法和属性。然后,您可以查看方法、属性和字段的所有名称,以及字段和属性的所有元信息(数据类型、可见性),以及属性的访问可能性(r/w/default/stored)等等。检查此作为开始:stackoverflow.com/questions/11350563/…

标签: string class delphi properties get


【解决方案1】:

从 cmets 中,您清楚地表明您正在寻找与 C# nameof 函数等效的 Delphi。

Delphi 中不存在这样的等价物,并且该语言没有让您自己创建它的工具。相反,您需要在代码中将该方法命名为字符串文字。

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 2021-12-04
    • 2011-01-14
    • 1970-01-01
    • 2012-01-08
    • 2017-11-19
    • 2013-08-22
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多