Delphi 支持三種形式的回調函數:
- 全局函數
這種方式幾乎是所有的語言都支持的,類的靜態函數也可以歸爲此類,它保存的只是一個函數的代碼起始地址指針( Pointer )。在 Delphi 中聲明一般爲:1TXXX=procedure/function (參數列表); - 類的成員函數
類的成員函數作爲回調函數,與全局函數相比,需要關聯具體的類的實例,所以它是由兩部分組成,一個是對象的實例地址,一個是代碼地址,兩個指針,構成一個記錄(結構體),參考 Delphi 中 TMethod 的聲明:123TMethod = recordCode, Data: Pointer;end;
在 Delphi 中的聲明一般爲:1TXXX=procedure/function (參數列表) of object;
在實踐中,你可以用 absolute 關鍵字來取出類的成員函數的 Code 和 Data 的值,Data 實際上就是對象的實例地址。Delphi 中的事件一般來說都是此類回調,要求事件響應函數是類的成員函數。 - 匿名函數
匿名函數 Delphi 實例上是通過接口來實現的,當你聲明一個匿名函數類型時,實際上是聲明瞭一個接口。比如我們看 Delphi 下面的匿名函數聲明:1TA=reference to procedure (x:Integer);
實際上是聲明瞭一個接口:123TA=interfaceprocedure Invoke(x:Integer);end;
然後當你實現一個匿名函數時,實際上就是實現了這個接口,那個匿名函數遵守接口的一切規則。Delphi 爲你隱藏了內部的一切細節~~~