zoukankan      html  css  js  c++  java
  • [转]C#事件简单示例

    在讲之前我们先来看看.Net Framework的编码规范:
    一、委托类型的名称都应该以EventHandler结束。
    二、委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一
    个 EventArgs类型(或继承自EventArgs)。
    三、事件的命名为委托去掉 EventHandler之后剩余的部分。
    四、继承自EventArgs的类型应该以EventArgs结尾。
    这就是微软编码的规范,当然这不仅仅是规则,而是在这种规则下使程序有更大的灵活
    性。

    例子:您是不是不是有过不去上早自习的经历,还叫朋友如果辅导员点到就发个信息通
    知你。下面我就就以不去早自习,睡懒觉,叫班长如果辅导员点到就通知我说辅导员来
    点到了,如果没来就发个信息说不用来了继续睡,辅导员没来。

    ==========================================================================

    // 观察者(也就是事件的订阅者)感兴趣的内容(EventArgs的继承类) 
    ///<summary>  
    /// 事件订阅者想要发布者传达的信息 
    ///</summary>  
    class InformMessageEventArgs : EventArgs
    {  
             private string message;    
             
             public string Message         
             {  
                      get { return message; }         
             }  
    
             public InformMessageEventArgs()         
             {         
             } 
     
             public InformMessageEventArgs(string message)         
             {    
                      this.message = message;         
             }     
    }
    
    // 观察者(也就是事件订阅者)小明 
    class XiaoMingPhone     
    {  
             // 感兴趣的事,就是今辅导员早自习来没来点到  
             public void Display(object sender, InformMessageEventArgs e)        
             {  
                      Console.WriteLine(e.Message);         
             }     
    }
    
    // 事件的发布者 
    class Monitor     
    {  
             // 声明一个委托  
             public delegate void SendMessageEventHandler(object sender, InformMessageEventArgs e);
             // 声明一个事件,辅导员点到事件  
             public event SendMessageEventHandler morningExercise;  
    
             protected virtual void isAdd(InformMessageEventArgs e)         
             {  
                      if (morningExercise != null)    
                      {  
                               morningExercise(this, e);             
                      }         
             }  
    
             // 如果辅导员点到了就会调用这个方法触发事件(给小明发信息) 
             public void send(InformMessageEventArgs e)         
             { 
                      isAdd(e);         
             }     
    }
    
    // 测试程序
    class Program     
    {  
             // 实例化一个小明 
             XiaoMingPhone xmp;  
             // 实例化一个班长 
             Monitor m;   
    
             public Program()         
             {  
                      xmp = new XiaoMingPhone();             
                      m = new Monitor(); 
                      //在班长那里注册一个通知事件(这一步实现事件发送者和事件接收者的关联
                      m.morningExercise +=new Monitor.SendMessageEventHandler(xmp.Display);
                      init();          
             }  
    
             static void Main(string[] args)         
             { 
                      new Program();         
             } 
    
             ///<summary>  
             /// .send()方法就是用来触发通知事件的 
             ///</summary> 
             private void init()         
             {  
                      // 班长一看辅导员点到了,触发了注册的通知事件。赶紧告诉小明辅导员来了 
                      string fudaoyuan = "点到";  
                      Console.WriteLine("星期一早自习"); 
                      if (fudaoyuan == "点到")             
                      {  
                               m.send(new InformMessageEventArgs("今天早上辅导员来点到了,你被记名了"));   
                      }   
                      // 班长一看辅导员没来点到,同样也触发了注册的通知事件。告诉小明继续睡辅导员没来 
                      fudaoyuan = "没来";  
                      Console.WriteLine("星期二早自习"); 
                      if (fudaoyuan == "没来")      
                      {  
                               m.send(new InformMessageEventArgs("辅导员早上没来,你继续睡吧"));            
                      } 
                      Console.ReadKey();         
             }  
    } 
  • 相关阅读:
    concurrent模块
    gevent模块
    Python中的线程
    2019.10.22 用TCP实现服务端并发接收
    Python中的进程
    进程和线程
    网络编程常用模块及方法
    [UOJ #222][NOI2016]区间(线段树)
    [BZOJ 4873][SHOI&SXOI2017]寿司餐厅(最大权闭合子图)
    [BZOJ 3751][NOIP2014]解方程(哈希)
  • 原文地址:https://www.cnblogs.com/jayhust/p/3474614.html
Copyright © 2011-2022 走看看