Delphi 2009中的匿名方法(reference to)

之前我们可以定义方法类型, 然后通过方法类型的变量来使用方法, 譬如: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.
之所以这样做, 是因为有时需要把 "方法" 当作参数, 譬如: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.
现在 Delphi 2009 可以使用匿名方法了(使用 reference 定义方法类型, 然后在代码中随用随写方法), 譬如: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.

时间: 2024-10-26 06:04:57

Delphi 2009中的匿名方法(reference to)的相关文章

Delphi 2009中TStrings与TStream的增强

在 Delphi 2009 中, TStrings 类(包括 TStringList 和包含 TStrings 属性的所有组件, 譬如 Memo.lines 属性.ListBox.Items 属性). TStream 类系列(包括 TFileStream.TMemoryStream 等) 的存取方法, 譬如 : LoadFromFile.SaveToFile.LoadFromStream.SaveToStream, 都有了选择 TEncoding 参数的重载. 本例效果图:

Delphi 2009中string与Char的改变

在 Delphi 2009 中: string = UnicodeString; (同样: PString = PUnicodeString;) Char = WideChar; (同样: PChar = PWideChar;) 本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; t

Delphi 2009中的新功能

JSON(JavaScript Object Notation) 类似与 XML; 虽始于 JavaScript, 但被多种语言支持, 它也成了 Delphi 2009 的新功能 之一. 假如有一段 XML: <id>2</id> <name>张三 </name> <age>99</age> 用 json 可以表示为: {"id":2, "name":"张三", "

Delphi 2009中的TLinkLabel实例

本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) LinkLabel1: TLinkLabel; procedure FormCreate(Sender: TObject); procedure LinkLabel1LinkCl

匿名方法,Lambda表达式,高阶函数

原文:匿名方法,Lambda表达式,高阶函数 匿名方法 c#2.0引入匿名方法,不必创建单独的方法,因此减少了所需的编码系统开销. 常用于将委托和匿名方法关联,例如 1. 使用委托和方法关联: this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);private void btnRefresh_Click(object sender, EventArgs e){    BindData();} 2. 使用委

Visual C# 2.0匿名方法揭密

visual 匿名方法基础 匿名方法是C#2.0的一个新的语言特性.本文的主要内容是提供给读者关于匿名方法的内部实现和工作方式的一个更好的理解.本文无意于成为匿名方法的完全语言特性参考. 匿名方法允许我们定义委托对象可以接受的代码块.这个功能省去我们创建委托时想要传递给一个委托的小型代码块的一个额外的步骤.它也消除了类代码中小型方法的混乱.让我们看看:比方说,我们有一个字符串集合命名为MyCollection.这个类有一个方法:获得集合中满足用户提供的过滤准则的所有项,调用者决定在集合中的一个特

C# 2.0 Specification(匿名方法)(一)

21匿名方法21.1.匿名方法表达式匿名方法表达式(anonymous-method-expression)定义了匿名方法(anonymous method),它将计算为引用该方法的一个具体值. l primary-no-array-creation-expression(基本非数组创建表达式:)-anonymous-method-expression(匿名方法表达式) l anonymous-method-expression:delegate anonymous-method-signatu

C# 2.0 Specification(匿名方法)(二)

21.7委托实例相等性如下规则适用由匿名方法委托实例的相等运算符(§7.9.8)和object.Equals方法产生的结果. l 当委托实例是由具有相同被捕获外部变量集合的语义相同的匿名方法表达式计算而产生时,可以说(但不是必须)它们相等. l 当委托实例由具有语义不同的匿名方法表达式,或具有不同的被捕获外部变量集合时,它们决不相等. 21.8明确赋值匿名方法参数的明确赋值状态与命名方法是相同的.也就是,引用参数和值参数被明确的赋初值,而输出参数不用赋初值.并且,输出参数在匿名方法正常返回之前必

C#2.0语言规范(三)匿名方法

规范 第三章 匿名方法原著:Microsoft Corporation原文:http://msdn.microsoft.com/vcsharp/team/language/default.aspx (SpecificationVer2.doc)翻译:lover_P出处: -------------------------------------------------------------------------------- [内容] 3.1 匿名方法表达式 3.2 匿名方法签名 3.3 匿