C#的委托与Delphi中的"事件委托"

C# in .Net Framework
        .Net Framework中,要传递方法,必须把方法细节包装在一种新类型的对象中,即委托.委托只是一种特殊的对象类型,其特殊之外在于,我们以前定义的所有对象都是包含数据,而委托包含的只是方法的细节.
        委托是一个类,所以其使用同类一样,需要两阶段.声明(定义)委托,创建委托一个或多个实例.
        声明委托语法

         delegate   void  Operation(unit x);

(定义的这个委托代表方法没有返回值,且有一个unit参数.
        delphi中  

TNotifyEvent  =  procedure(Sender: TObject) of  object ;

   在delphi下实现回调的例子

 1  {
 2  使用委托,将方法做为别一个方法的参数传递的例子(回调)
 3  }
 4  unit Unit1;
 5 
 6  interface
 7 
 8  uses
 9    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
10    Dialogs, StdCtrls;
11 
12  type
13    TDelegateClass = procedure(msg: string ) of  object ; // 定义一个委托
14    TDelegateClassArray = array[ 0 .. 1 ] of TDelegateClass;
15    TForm1  =   class (TForm)
16      Button1: TButton;
17      Button2: TButton;
18      procedure Button1Click(Sender: TObject);
19      procedure Button2Click(Sender: TObject);
20     private
21      { Private declarations }
22      procedure UserMethod(msg: string ); // 委托指定的用户自定义方法
23      procedure UserMethod2(msg: string ); // 委托指定的用户自定义方法2    
24      procedure doDelegate(Delegate:TDelegateClass;msg: string ); // 如果委托实例存在,就执行委托
25     public
26      { Public declarations }
27    end;
28 
29  var
30    Form1: TForm1;
31 
32  implementation
33 
34  {$R  * .dfm}
35 
36  { TForm1 }
37 
38  procedure TForm1.doDelegate(Delegate:TDelegateClass;msg: string );
39  begin
40     if  Assigned(Delegate) then
41    Delegate(msg);
42  end;
43 
44  procedure TForm1.Button1Click(Sender: TObject);
45  begin
46    doDelegate(UserMethod, ' test ' ); // 调用委托处理程序,显示test信息
47  end;
48 
49  procedure TForm1.UserMethod(msg:  string );
50  begin
51    showmessage(msg);
52  end;
53 
54  procedure TForm1.Button2Click(Sender: TObject);
55  var
56    test:TDelegateClassArray;
57  begin
58    test[ 0 ]: = UserMethod;
59    test[ 1 ]: = UserMethod2;
60    doDelegate(test[ 0 ], ' test ' );
61    doDelegate(test[ 1 ], ' test ' );
62  end;
63 
64  procedure TForm1.UserMethod2(msg:  string );
65  begin
66    showmessage( ' 这是第二个方法 ' );
67  end;
68 
69  end.

 

文章出处:

http://www.cnblogs.com/zhouxihong/archive/2006/02/08/327088.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值