unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end;var Form1: TForm1;implementation{$R *.dfm}Type TFun = function(const num: Integer): Integer; {先定义一个方法类型} function MySqr(const num: Integer): Integer; {再创建一个吻合上面类型的一个方法} begin Result := num * num; end;{测试}procedure TForm1.FormCreate(Sender: TObject);var fun: TFun; {方法变量} n: Integer;begin fun := MySqr; {给变量赋值为相同格式的方法} n := fun(9); {现在这个方法变量可以使用了} ShowMessage(IntToStr(n)); {81}end;end.之所以这样做, 是因为有时需要把 "方法" 当作参数, 譬如:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end;var Form1: TForm1;implementation{$R *.dfm}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;{测试}procedure TForm1.FormCreate(Sender: TObject);var n: Integer;begin n := 9; MyProc(n, MySqr); ShowMessage(IntToStr(n)); {81}end;end.现在 Delphi 2009 可以使用匿名方法了(使用 reference 定义方法类型, 然后在代码中随用随写方法), 譬如:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end;var Form1: TForm1;implementation{$R *.dfm}Type TFun = reference to function(const num: Integer): Integer; {用 reference 定义匿名方法类型}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;end.把匿名方法当作其他方法的参数:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end;var Form1: TForm1;implementation{$R *.dfm}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;end.