首页 > 代码库 > 普通方法、类的方法、匿名方法 做参数
普通方法、类的方法、匿名方法 做参数
1.普通方法做参数:
如果方法 是类的方法,那么就不能当函数的参数了,编译会报错,就是说 类的方法的指针 与 普通方法的指针是有区别的,毕竟类的方法的指针 可能包含了 面向对象的 继承 覆盖 等信息;
2.类的方法做参数,就是说类的方法的类型要加上 of object:
3.匿名方法 做参数,要加上 reference to
最终的调试代码:
unit Unit6;interfaceuses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;type /// <summary> /// 普通方法类型 /// </summary> TPuTongFun = function(const num: Integer): Integer; /// <summary> /// 类的方法的类型 /// </summary> TObjectFun = function(const num: Integer): Integer of object; /// <summary> /// 匿名方法的类型 /// </summary> TNiMingFun = reference to function(const num: Integer): Integer; TForm6 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } /// <summary> /// 类的方法 /// </summary> function puTongFun3(const num: Integer): Integer; end;var Form6: TForm6;implementation{$R *.dfm}function puTongFun1(const num: Integer): Integer;begin //加法 Result := num + num;end;function puTongFun2(const num: Integer): Integer;begin //乘法 Result := num * num;end;function TForm6.puTongFun3(const num: Integer): Integer;begin //乘以5 Result := num * 5;end;//用普通方法做参数的方法function abc(const x: Integer; AFun: TPuTongFun): string;begin Result := (AFun(x) + 1).ToString;end;//用类的方法做参数的方法function abcObject(const x: Integer; AFun: TObjectFun): string;begin Result := (AFun(x) + 1).ToString;end;//匿名方法类型做参数function abcNiMing(const x: Integer; AFun: TNiMingFun): string;begin Result := (AFun(x) + 1).ToString;end;procedure TForm6.Button1Click(Sender: TObject);var pu1,pu2: TPuTongFun; pu3: TObjectFun; pu4: TNiMingFun;begin //初始化实例(可以根据情况选择方法的实例) pu1 := puTongFun1;{用加法} pu2 := puTongFun2;{用乘法} pu3 := puTongFun3;{类的方法-乘以5} //匿名方法的实例创建 pu4 := function(const num: Integer): Integer {注意本行最后不能有 ; 号} begin Result := num * 6; end; //结果 ShowMessage(abc(3, pu1)); {7} ShowMessage(abc(3, pu2)); {10} ShowMessage(abcObject(3, pu3)); {16} ShowMessage(abcNiMing(3, pu4)); {19}end;end.
普通方法、类的方法、匿名方法 做参数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。