gpt4 book ai didi

delphi - 如何使用RTTI修改delphi属性Getter/Setter?

转载 作者:行者123 更新时间:2023-12-03 15:28:54 27 4
gpt4 key购买 nike

我想使用 RTTI 替换属性的 getter/setter。

我知道您可以使用 TPropInfo.SetProc/GetProc 访问 getter setter,并且我知道这些字段指向不同的数据,具体取决于属性是否使用虚拟方法、直接字段访问或静态方法。

我对用自定义虚拟方法替换指向虚拟方法的属性 setter / getter 很感兴趣。

TRttiInstanceProperty(RttiProperty).PropInfo^.SetProc := ? // SomeOtherInstance.Setter
TRttiInstanceProperty(RttiProperty).PropInfo^.GetProc := ? // SomeOtherInstance.Getter

最佳答案

您无法通过这种方式实现您的目标,因为您的问题是基于错误的概念。 RTTI 信息为您提供编译代码中指定的 getter/setter。但是当您访问属性时,不会查阅 RTTI 信息。相反,直接调用 getter/setter。

为了说明这一点,请考虑以下规范的只读属性:

property Count: Integer read GetCount;

您可以使用 RTTI 查询此属性以找出实现 getter 的方法。但是,当您在代码中编写此代码时:

Writeln(Obj.Count);

编译器将其翻译为:

Writeln(Obj.GetCount);

并编译它。在调用站点,从不查阅 RTTI 信息。因此,任何修改 RTTI 信息的尝试都不会影响访问该属性的代码。

您需要找到不同的解决方案来解决您的问题。

关于delphi - 如何使用RTTI修改delphi属性Getter/Setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21749715/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com