首页 > 编程语言 > delphi D11编程语言手册 匿名方法(P479-495)

delphi D11编程语言手册 匿名方法(P479-495)

时间:2022-12-19 15:59:14浏览次数:42  
标签:AnonMeth D11 delphi P479 匿名 TPR end 方法 procedure

 

 这本书可以在 Delphi研习社②群 256456744 的群文件里找到. 书名: Delphi 11 Alexandria Edition.pdf

 

匿名方法可以让我们把一个方法的实际代码当成参数来进行传递,而不用事先定义,然后把方法的名字当成了参数,另外匿名方法对局部变量的生命周期管理与其他方法的管理也不同.

D中的匿名方法,实际上就是其它语言(如JS)中的闭包!

reference to是定义匿名方法的关键字,我们不必在type阶段就具现方法代码,而上在需要调用的地方再去具现.所以这个匿名方法你可以自由发挥,写出多少个不同版本都是你说了算.用法上面感觉这就应该是inline该干的活.

 

 

匿名方法是可以被存储到变量上面的.

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

相关文章

  • delphi D11编程语言手册 学习笔记(P424-477) 泛型
      这本书可以在Delphi研习社②群256456744的群文件里找到.书名:Delphi11AlexandriaEdition.pdf 泛型在C++中叫做类型模板(templateclasses),单从字面上理......
  • Delphi中的多线程
    Delphi中的多线程问题入门先看一个程序procedureTForm1.btn1Click(Sender:TObject);vari:Integer;beginfori:=0to500000dobeginCanvas.TextOu......
  • Android11 实现侧键打印走纸
    /frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.javaelseif(keyCode==KeyEvent.KEYCODE_F12){      //XCSWw......
  • Android11 双击亮屏 上层修改
    packagecom.android.systemui.qs.tiles;importandroid.content.BroadcastReceiver;importandroid.content.ComponentName;importandroid.content.Context;import......
  • Delphi 指针[3]指针运算符(Pointer operators)
    Delphi指针[3]指针运算符(Pointeroperators) 关系运算符<、>、<=和>=可以接受PChar和PWideChar类型的操作数。以下运算符也将指针作为操作数。字符指针运算符运算符......
  • Delphi 指针[2] 指针类型(Pointer types)
    Delphi指针[2]指针类型(Pointertypes)可以使用以下语法声明指向任何类型的指针typepointerTypeName=^type定义记录或其他数据类型时,通常也会定义指向该类型的指......
  • Delphi(lazarus) TStringHelper用法详解(转载)
    Delphi(lazarus)TStringHelper用法详解DelphiXE4的TStringHelper,对操作字符串进一步带来更多的方法,使用这些方法才可以实现跨平台的代码。Delphi引用单元:System.Sys......
  • Delphi 11.2应用体验报告
    Delphi11.2按个人预期发布了!官方下载地址:​​https://altd.embarcadero.com/download/radstudio/11.0/RADStudio_11_2_10937a.iso​​,安装过程:如果你从11.1安装,则是无缝升......
  • delphi编写sql脚本文件批量执行程序
    程序使用DelphiXE11.1开发,用到控件UniDac9.1.1,QDAC里面的Qlog组件。程序实现了SQL脚本文件批处理执行应用,运行效果图。  文件.pas代码unitmain;interfaceuses......
  • delphi D11编程语言手册 学习笔记(P393-419) 对象与内存
      这本书可以在Delphi研习社②群256456744的群文件里找到.书名:Delphi11AlexandriaEdition.pdf 这些年来,Delphi行动装置编译器提供了一个不同的内存模式,称......