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();        
         } 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值