我担心这可能是一个比一个虚拟的问题,但这让我很难倒。

我在寻找用最简单的方式可能通过的方法的一个对象进入一个过程,使过程中可以调用对象的方法(例如超时后,或许在不同的螺纹)。所以基本上我想到:

  • 捕捉一个参照对象的方法。
  • 通过参照的程序。
  • 使用这一基准,呼吁对象的方法的过程。

我想我可以取得同样的效果使用的接口,但是我认为还有另一种方式,由于这个"程序的对象"类宣言》的存在。

不不 的工作,但它可能有助于解释在那里我很困惑...?

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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top