The anonymous method in Delphi 2009 (reference to)

Source: Internet
Author: User
Tags anonymous

Before we can define the method type and then use the method by the variable of the method type, for example:unit Unit1;
interface
uses
 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.
This is done because there are times when the "method" needs to be taken as a parameter, such as:unit Unit1;
interface
uses
 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.
Now Delphi 2009 can use the anonymous method (use reference to define the method type, and then use the Write method in the code), such as:unit Unit1;
interface
uses
 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.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.