我正在编写一个能够显示任何数据列表的控件。我想做的是模仿for-in构造,我检查一个包含Current属性和MoveNext方法的公共GetEnumerator函数。
我已经确定了以下内容:
虽然介于两者之间,但我缺少一些信息:
答案 0 :(得分:2)
请注意,这仅适用于 实例(或其中一个组件) 还有一个已发布的财产 指向已发布的方法。该 好消息是,情况就是如此 大多数现有已公布的方法 - 如此 作为TForm上的事件处理程序 实例。坏消息是这个 不会是这样的 我们想要发布的方法 在运行时动态调用(因此 不会被分配给任何事件。)
因此,在当前的RTTI模型下,您可能无法做到这一点。但是Delphi 2010应该有一个扩展的RTTI系统,这将使你能够更轻松地完成这样的事情,并且它应该是RSN。 (曾经有一个关于Embarcadero网站的倒计时倒计时,今晚午夜倒计时。他们已经取消了它,所以我不确定这是否仍然是官方发布日期。)
答案 1 :(得分:1)
首先,请注意RTTI仅适用于已发布的属性和方法。
要调用MethodAdress检索的方法,只需执行:
TMyMethod = procedure (Self : TObject; const Param : String);
...
var
MyMethod : TMyMethod;
...
MyMethod := Obj.MethodAdress ('MethodName');
if Assigned (MyMethod) then
MyMethod (Obj, 'Hallo');
关于你的第二个问题,这可能会有所帮助: