分享

C#中的委托与事件

 昵称10504424 2013-03-07

概念

委托

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。委托用于将方法作为


参数传递给其他方法。在方法重载的上下文中,方法的签名不包括返回值。但在委托的上下文中,签名的确包括返回


值。换句话说,方法和委托必须具有相同的返回值。


委托的声明


事件


事件则是委托的一种特殊形式,发生有意义的事情时,事件对象处理通知过程。或对象可以通过事件向其他类


或对象通知发生的相关事情。 发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为“订户”。



事件的声明


委托和事件的使用

  1. <SPAN style="FONT-SIZE: 14px">//看NBA直播的同事   
  2.     class NBAObserver  
  3.     {  
  4.           //构造函数对StockObserver类进行赋值    
  5.         private string name;  
  6.         private Subject sub;  
  7.         public NBAObserver(string name, Subject sub)  
  8.         {  
  9.             this.name = name;  
  10.             this.sub = sub;  
  11.         }  
  12.         //方法“通知”   
  13.         public void ShutDownNBADirect()  
  14.         {  
  15.             Console.WriteLine("{0}{1}关闭NBA直播,赶快假装工作!",sub.SubjectState ,name );  
  16.         }  
  17.     }  
  18.      
  19.      
  20.     //声明委托   
  21.     delegate void EventHandler();  
  22.     //boss类   
  23.     class Boss : Subject  
  24.     {  
  25.         //声明一个事件Update,类型为委托EventHandler   
  26.         public event EventHandler Update ;  
  27.   
  28.         private string action ;     //用于记录前台状态的变量   
  29.   
  30.         public void Notify ()  
  31.         {  
  32.             Update ();                  //在访问方法“Notify”时,调用update 事件   
  33.         }  
  34.   
  35.         //返回和对前台状态进行读写   
  36.         public string SubjectState  
  37.         {  
  38.             get { return action; }  
  39.             set { action = value; }  
  40.         }  
  41.     }  
  42.     //Secretary类   
  43.     class Secretary : Subject  
  44.     {  
  45.         //声明一个事件Update,类型为委托EventHandler   
  46.         public event EventHandler Update;  
  47.   
  48.         private string action;     //用于记录前台状态的变量   
  49.   
  50.         public void Notify()  
  51.         {  
  52.             Update();                  //在访问方法“Notify”时,调用update 事件   
  53.         }  
  54.   
  55.         //返回和对前台状态进行读写   
  56.         public string SubjectState  
  57.         {  
  58.             get { return action; }  
  59.             set { action = value; }  
  60.         }  
  61.     }</SPAN>  


客户端代码


通过 委托EventHandler将,将“看股票者(stockobserver)”的closestockmarket方法挂钩到老板的更新上,同时将Shu


tDownNBADirect的方法挂钩到update上,也就是将两个不同类的不同方法委托给老板类的更新了。


委托具有以下特点:


委托类似于 C++ 函数指针,但它们是类型安全的。


委托允许将方法作为参数进行传递。


委托可用于定义回调方法。


委托可以链接在一起;例如,可以对一个事件调用多个方法。


方法不必与委托签名完全匹配。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多