.NET中有委托(Delegate)的概念,其声明形式如下所示:
public
delegate void MyDelegate(int aIntParam, string aStringParam);
依个人所见,委托实际上就是规定一种接口,提供一种规范,任何符合该委托签名的函数/过程都属于同一类。
在Delphi中,也有类似于“委托”的概念(不过可没有C#的功能丰富,不过两者从根本上说都应该是函数指针),如下所示:
type
TMyDelegateFunc = function (AIntParam: integer; AStringParam: string): Boolean;
TMyDelegateProc = procedure (AIntParam: integer; AStringParam: string);
TMyDelegateFunc = function (AIntParam: integer; AStringParam: string): Boolean;
TMyDelegateProc = procedure (AIntParam: integer; AStringParam: string);
在以上的声明中,还可以用
of object关键字来规定所定义的“委托”是应用于对象的函数/过程,还是应用于非对象的函数/过程,例:
type
TMyObjectDelegate = procedure (AIntParam: integer; AStringParam: string) of object; //对象的
TMyObjectDelegate = procedure (AIntParam: integer; AStringParam: string) of object; //对象的
函数/过程
TMyRegularDelegate = procedure (AIntParam: integer; AStringParam: string); //非对象的(一般的)函数/过程
TMyRegularDelegate = procedure (AIntParam: integer; AStringParam: string); //非对象的(一般的)函数/过程
以下举个简单的例子来说明一下Delphi中“委托”的应用。附件为完整程序。