这本书可以在 Delphi研习社②群 256456744 的群文件里找到. 书名: Delphi 11 Alexandria Edition.pdf
匿名方法可以让我们把一个方法的实际代码当成参数来进行传递,而不用事先定义,然后把方法的名字当成了参数,另外匿名方法对局部变量的生命周期管理与其他方法的管理也不同.
D中的匿名方法,实际上就是其它语言(如JS)中的闭包!
reference to是定义匿名方法的关键字,我们不必在type阶段就具现方法代码,而上在需要调用的地方再去具现.所以这个匿名方法你可以自由发挥,写出多少个不同版本都是你说了算.用法上面感觉这就应该是inline该干的活.
![](/i/l/?n=23&i=blog/981841/202212/981841-20221219114948873-574509984.png)
匿名方法是可以被存储到变量上面的.
type TPR = reference to procedure(var N: Integer); //匿名方法 TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private FAnonMeth: TPR; procedure SetAnonMeth(const Value: TPR); { Private declarations } public { Public declarations } property AnonMeth: TPR read FAnonMeth write SetAnonMeth; //把匿名方法委托到窗体属性 AnonMeth end; var Form1: TForm1; j: Integer; implementation {$R *.dfm} //这个点击事件只是把匿名方法具现,然后存到AnonMeth里 procedure TForm1.Button1Click(Sender: TObject); begin j := 5; AnonMeth := procedure(var N: Integer) begin j := j + N; end; Memo1.Lines.add('Button1Click: ' + j.ToString) end; procedure TForm1.Button2Click(Sender: TObject); var K: Integer; begin K := 10; if Assigned(AnonMeth) then //检查AnonMeth是否为nil begin AnonMeth(K); //调用里面的方法 Memo1.Lines.add('Button2Click: ' + j.ToString) end; end; procedure TForm1.SetAnonMeth(const Value: TPR); begin FAnonMeth := Value; end;
标签:AnonMeth,D11,delphi,P479,匿名,TPR,end,方法,procedure From: https://www.cnblogs.com/yoooos/p/16991533.html