Delphi 2009 引入 reference to 定義匿名方法類型,支援內聯定義方法體、捕獲外部變量(閉包)、作為參數傳遞,大幅簡化回調、事件、線程任務等場景代碼。
type TFun = function(const num: Integer): Integer;
function MySqr(const num: Integer): Integer; begin Result := num * num; end;
procedure MyProc(var x: Integer; fun: TFun); begin x := fun(x); end;
var fun: TFun; n: Integer;
begin fun := MySqr; n := 9; MyProc(n, fun); end; {81}
type TFun = reference to function(const num: Integer): Integer;
procedure TForm1.FormCreate(Sender: TObject);
var fun: TFun; n: Integer;
begin
{求平方}
fun := function(const a: Integer): Integer {注意:此行無分號}
begin Result := a * a; end;
n := fun(9); ShowMessage(IntToStr(n)); {81}
{求倍數}
fun := function(const a: Integer): Integer
begin Result := a + a; end;
n := fun(9); ShowMessage(IntToStr(n)); {18}
end;
type TFun = reference to function(const num: Integer): Integer;
function FunTest(const n: Integer; fun: TFun): string;
begin Result := Format('%d, %d', [n, fun(n)]); end;
procedure TForm1.FormCreate(Sender: TObject);
var f: TFun; s: string;
begin
f := function(const a: Integer): Integer
begin Result := a * a; end;
s := FunTest(9, f); ShowMessage(s); {9, 81}
end;
reference to 替代舊式方法類型定義function(...) : Type 直接接 begin應用場景: 線程池任務、並行庫回調、LINQ 風格查詢、事件處理器動態生成、延遲執行封裝。