delphi 匿名方法 reference to

2021-09-23 23:50:05 字數 3169 閱讀 2665

unit unit1;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms,

dialogs;

type

tform1 = class(tform)

procedure formcreate(sender: tobject);

end;

varform1: tform1;

implementation

type

tfun = function(const num: integer): integer;

function mysqr(const num: integer): integer;  

begin

result := num * num;

end;

procedure tform1.formcreate(sender: tobject);

varfun: tfun;  

n: integer;

begin

fun := mysqr;            

n := fun(9);              

showmessage(inttostr(n));

end;

end.

之所以這樣做, 是因為有時需要把 "方法" 當作引數, 譬如:

unit unit1;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms,

dialogs;

type

tform1 = class(tform)

procedure formcreate(sender: tobject);

end;

varform1: tform1;

implementation

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);

varn: integer;

begin

n := 9;

myproc(n, mysqr);

showmessage(inttostr(n));

end;

end.

現在 delphi 2009 可以使用匿名方法了(使用 reference 定義方法型別, 然後在**中隨用隨寫方法), 譬如:

unit unit1;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms,

dialogs;

type

tform1 = class(tform)

procedure formcreate(sender: tobject);

end;

varform1: tform1;

implementation

type

tfun = reference to function(const num: integer): integer;

procedure tform1.formcreate(sender: tobject);

varfun: tfun;

n: integer;

begin

fun := function(const a: integer): integer

begin

result := a * a;

end;

n := fun(9);

showmessage(inttostr(n));

fun := function(const a: integer): integer

begin

result := a + a;

end;

n := fun(9);

showmessage(inttostr(n));

end;

end.

把匿名方法當作其他方法的引數:

unit unit1;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms,

dialogs;

type

tform1 = class(tform)

procedure formcreate(sender: tobject);

end;

varform1: tform1;

implementation

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);

varf: tfun;

s: string;

begin

f := function(const a: integer): integer

begin

result := a * a;

end;

s := funtest(9, f);

showmessage(s);

end;

end.

c 匿名方法用途 C 匿名方法

我們討論了使用委託來引用具有與委託相同簽名的任何方法。換句話說,您可以使用該委託物件呼叫可由委託引用的方法。匿名方法提供了一種將 塊作為委託引數傳遞的技術。匿名方法是沒有名稱的方法,只是主體。您無需在匿名方法中指定返回型別 它是從方法體內的return語句推斷出來的。編寫匿名方法 匿名方法是通過建立...

c 匿名方法用途 C 匿名方法

c 語言 的 c 匿名方法 前面我們學習過,委託可用於引用任何與委託簽名相同的方法。換句話說,可以呼叫可以由委託使用該委託物件引用的方法。匿名方法提供了一種將 塊作為委託引數傳遞的技術。匿名方法是沒有名稱的方法,只有方法體。不需要在匿名方法中指定返回型別 它是從方法體中的return語句來推斷的。編...

匿名方法(內嵌方法)

用匿名方法定義委託的語法與前面的定義並沒有什麼區別。但在例項化委託時,就有區別了。下面是乙個非常簡單的控制台應用程式,說明了如何使用匿名方法 console.writeline anondel start of string 委託delegatetest 定義為乙個類級變數,它帶乙個字串引數。有區別...