C#中事件存在的意义

来源:互联网 发布:洛氏结构源码 编辑:程序博客网 时间:2024/06/05 08:54

C#中事件是基于委托。

 

不使用event关键字定义委托实例对象:

[c-sharp] view plain copy
  1. //定义一委托类型  
  2. public delegate void MyButtonEventHandler(string msg);  
  3.   
  4. //定义MyButton类,模拟按钮对象  
  5. public class MyButton  
  6. {  
  7.     //定义一委托实例  
  8.     public MyButtonEventHandler Click;  
  9.     private string msg;  
  10.   
  11.     /// <summary>  
  12.     /// 用于触发Click事件(模拟点击按钮)  
  13.     /// </summary>  
  14.     public void OnClick()  
  15.     {  
  16.         if (Click != null)  
  17.         {  
  18.             Click("我点击了:" + msg);  
  19.         }  
  20.     }  
  21.   
  22.     //构造函数  
  23.     public MyButton(string msg)  
  24.     {  
  25.         this.msg = msg;  
  26.     }  
  27. }  

[c-sharp] view plain copy
  1. MyButton mb = new MyButton("MyButton对象");  
  2. //指定点击按钮后的处理方法  
  3. mb.Click += MyButton_Click;  
  4.   
  5. /* * * * * * * * * * * * * * * * * * * * * * * * 
  6. 注意: 
  7. 作为一个按钮,本身正常的业务逻辑是:点击按钮后,执行响应处理方法 
  8. 但由于mb.Click没有使用event关键字,只作为一公开普通委托实例对象 
  9. 因此无需点击,就可任意执行处理方法,这显然不是我们所期望的^-^ 
  10. * * * * * * * * * * * * * * * * * * * * * * * * */  
  11. mb.Click("Click为公共委托对象,可任意触发执行委托方法,而无需触发OnClick方法");  
  12. //点击按钮触发委托方法  
  13. //mb.OnClick();  
  14.   
  15. //响应处理方法  
  16. private void MyButton_Click(string msg)  
  17. {  
  18.     Response.Write(msg);  
  19. }  

 

使用event关键字:

[c-sharp] view plain copy
  1. //定义一委托类型  
  2. public delegate void MyButtonEventHandler(string msg);  
  3.   
  4. public class MyButton  
  5. {  
  6.     //定义一委托实例(事件)  
  7.     public event MyButtonEventHandler Click;  
  8.     private string msg;  
  9.   
  10.     /// <summary>  
  11.     /// 用于触发Click事件(模拟点击按钮)  
  12.     /// </summary>  
  13.     public void OnClick()  
  14.     {  
  15.         if (Click != null)  
  16.         {  
  17.             Click("我点击了:" + msg);  
  18.         }  
  19.     }  
  20.   
  21.     //构造函数  
  22.     public MyButton(string msg)  
  23.     {  
  24.         this.msg = msg;  
  25.     }  
  26. }  

[c-sharp] view plain copy
  1. MyButton mb = new MyButton("MyButton对象");  
  2. mb.Click += MyButton_Click;  
  3.   
  4. //以下报错  
  5. //mb.Click("Click为虽公共委托对象,但不可随意执行委托方法,因为有event关键字修饰!");  
  6.   
  7. //点击按钮后才触发委托方法(保证只有MyButton对象才可触发该事件)  
  8. mb.OnClick();  

0 0
原创粉丝点击