如何通过一个目的方法作为一个参数在德尔福,然后叫它?
题
我担心这可能是一个比一个虚拟的问题,但这让我很难倒。
我在寻找用最简单的方式可能通过的方法的一个对象进入一个过程,使过程中可以调用对象的方法(例如超时后,或许在不同的螺纹)。所以基本上我想到:
- 捕捉一个参照对象的方法。
- 通过参照的程序。
- 使用这一基准,呼吁对象的方法的过程。
我想我可以取得同样的效果使用的接口,但是我认为还有另一种方式,由于这个"程序的对象"类宣言》的存在。
下 不不 的工作,但它可能有助于解释在那里我很困惑...?
interface
TCallbackMethod = procedure of object;
TCallbackObject = class
procedure CallbackMethodImpl;
procedure SetupCallback;
end;
implementation
procedure CallbackTheCallback(const callbackMethod: TCallbackMethod);
begin
callbackMethod();
end;
procedure TCallbackObject.CallbackMethodImpl;
begin
// Do whatever.
end;
procedure TCallbackObject.SetupCallback;
begin
// following line doesn't compile - it fails with "E2036 Variable required"
CallbackTheCallback(@self.CallbackMethodImpl);
end;
(一旦这个问题的回答是,我会去除上述代码,除非它艾滋病的解释莫名其妙。)
解决方案
只是删除指针的东西。德尔斐会为你做它:
procedure TCallbackObject.SetupCallback;
begin
CallbackTheCallback(CallbackMethodImpl);
end;
其他提示
你不需要指针语法是,你已经声明的方法类型作为一种程序的对象。编译器将图出的"对象"的发言如何处理过的方法关闭的回proc.
不隶属于 StackOverflow