【发布时间】: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