[转]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();         
         }  
} 
原文地址:https://www.cnblogs.com/jayhust/p/3474614.html