×

关于学习委托事件的经典例子!

Kalet Kalet 发表于2009-03-20 12:00:13 浏览275 评论0

抢沙发发表评论

两个例子均用现实的例子来解释委托事件的处理过程。很好!  
 
   第一个例子  关于学习委托事件的经典例子!
 
public  delegate  void  EatEventHandler(object  sender,  EatEventArgs  e);    
这个的定义也可以不要这样.可以直接就定义一个参数  
public  delegate  void  EatEventHandler(string  e);  但然用的时候的参数要相对应好哦  
 
using  System;    
 
namespace  nsEventSample    
{    
       ///  <summary>    
       ///  类EatEventArgs  必须继承自类EventArgs,用来引发事件时封装数据    
       ///  </summary>    
       public  class  EatEventArgs  :  EventArgs    
       {    
               public  String  restrauntName;          //饭店名称    
               public  decimal  moneyOut;                        //准备消费金额    
       }    
 
       ///  <summary>    
       ///  这个委托用来说明处理吃饭事件的方法的方法头(模式)    
       ///  </summary>    
       public  delegate  void  EatEventHandler(object  sender,  EatEventArgs  e);    
 
       ///  <summary>    
       ///  引发吃饭事件(EateEvent)的类Master(主人),这个类必须    
       ///  1.声明一个名为EatEvent的事件:  public  event  EatEventHandler  EatEvent;    
       ///  2.通过一个名为OnEatEvent的方法来引发吃饭事件,给那些处理此事件的方法传数据;    
       ///  3.说明在某种情形下引发事件呢?在饿的时候。用方法Hungrg来模拟。    
       ///  </summary>    
       public  class  Master    
       {    
               //声明事件    
               public  event  EatEventHandler  EatEvent;    
 
               //引发事件的方法    
               public  void  OnEatEvent(EatEventArgs  e)    
               {    
                       if  (EatEvent  !=  null)    
                       {    
                               EatEvent(this,  e);    
                       }    
               }    
 
               //当主人饿的时候,他会指定吃饭地点和消费金额。    
               public  void  Hungry(String    restrauntName,  decimal  moneyOut)    
               {    
                       EatEventArgs  e  =  new  EatEventArgs();    
                       e.restrauntName  =  restrauntName;    
                       e.moneyOut  =  moneyOut;    
 
                       Console.WriteLine("主人说:");    
                       Console.WriteLine("我饿了,要去{0}吃饭,消费{1}元",  e.restrauntName,  e.moneyOut);    
 
                       //引发事件    
                       OnEatEvent(e);    
               }    
       }    
 
       ///  <summary>    
       ///  类Servant(仆人)有一个方法ArrangeFood(安排食物)来处理主人的吃饭事件    
       ///  </summary>    
       public  class  Servant    
       {    
               public  void  ArrangeFood(object  sender,  EatEventArgs  e)    
               {    
                       Console.WriteLine();    
                       Console.WriteLine("仆人说:");    
                       Console.WriteLine("我的主人,  您的命令是  :  ");    
                       Console.WriteLine("吃饭地点  --  {0}",  e.restrauntName);    
                       Console.WriteLine("准备消费  --  {0}元  ",  e.moneyOut);    
                       Console.WriteLine("好的,正给您安排。。。。。。。。");    
                       Console.WriteLine("主人,您的食物在这儿,请慢用");    
               }    关于学习委托事件的经典例子!
       }    
 
       ///  <summary>    
       ///  类God安排qinshihuang(秦始皇)的仆人是lisi(李斯),并让李斯的ArrangeFood    
       ///  方法来处理qinshihuang的吃饭事件:qinshihuang.EatEvent  +=  new  EatEventHandler(lishi.ArrangeFood);    
       ///  </summary>    
       public  class  God    
       {    
               public  static  void  Main()    
               {    
                       Master    qinshihuang  =  new  Master();    
                       Servant  lishi  =  new  Servant();    
 
                       qinshihuang.EatEvent  +=  new  EatEventHandler(lishi.ArrangeFood);    
                           
                       //秦始皇饿了,想去希尔顿大酒店,消费5000元    
                       qinshihuang.Hungry("希尔顿大酒店",  5000.0m);    
               }    
       }    
}    
   
 
第二个例子来源于:  
http://community.csdn.net/Expert/topic/2651/2651579.xml?temp=.7183191  
 
比如说一个公司(场景),你是老板,手下有两个员工,小张和小李。你命令小张注意小李,在开发软件工作的时候如果上网打游戏,你就记录下来,从小李工资里扣100元钱。这个实际上就是现实中的委托。  
 
现在给出一个代码,C#控制台程序,编译运行通过  
using  System;  
 
namespace  CSharpConsole  
{  
 public  class  场景  
 {  
   [STAThread]  
   public  static  void  Main(string[]  args)  
   {  
     Console.WriteLine("场景开始了....");  
     //  生成小王  
     小王  w  =  new  小王();  
     //  生成小账  
     小张  z  =  new  小张();  
 
     //  指定监视  
     z.PlayGame  +=  new  PlayGameHandler(w.扣钱);  
       
     //  开始玩游戏  
     z.玩游戏();  
 
     Console.WriteLine("场景结束...");  
     Console.ReadLine();  
   }  
 }  
 
 
 //  负责扣钱的人  
 public  class  小王  
 {  
   public  小王()  
   {  
     Console.WriteLine("生成小王...");  
   }  
 
   public  void  扣钱(object  sender,EventArgs  e)  
   {  
     Console.WriteLine("小王:好小子,上班时间胆敢玩游戏...");  
     Console.WriteLine("小王:看看你小子有多少钱...");  
     小张  f  =  (小张)sender;  
     Console.WriteLine("小张的钱:  "  +  f.钱.ToString());  
     Console.WriteLine("开始扣钱......");  
     System.Threading.Thread.Sleep(500);  
     f.钱  =  f.钱  -  500;  关于学习委托事件的经典例子!
     Console.WriteLine("扣   


群贤毕至

访客