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 定義為乙個類級變數,它帶乙個字串引數。有區別...