CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

关于委托事件的一两个很好的例子!希望对大家学习有一定帮助!

楼主hackate(兰花开香入梦境,独思佳人亦飘然!!)2005-06-20 09:17:32 在 .NET技术 / ASP.NET 提问

哇。眼见在CSDN也玩了一段时间了。想继续学习一下了。最近也有个项目要做了。可能不怎么常来了!在离开前,发个关于对学习委托事件的朋友很有帮助的一两个例子。一个朋友给的,一个是在CSDN搜索到的。感觉非常好!恩,贴上来!  
   
      两个例子均用现实的例子来解释委托事件的处理过程。很好!  
   
      第一个例子  
   
  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("扣完了....现在小张还剩下:"   +   f.钱.ToString());  
      }  
    }  
   
    //   如果玩游戏,则引发事件  
    public   class   小张  
    {  
      //   先定义一个事件,这个事件表示“小张”在玩游戏。  
      public   event   PlayGameHandler   PlayGame;  
      //   保存小张钱的变量  
      private   int   m_Money;  
   
      public   小张()  
      {  
        Console.WriteLine("生成小张....");  
        m_Money   =   1000;   //   构造函数,初始化小张的钱。  
      }  
   
      public   int   钱   //   此属性可以操作小张的钱。  
      {  
        get  
        {  
          return   m_Money;  
        }  
        set  
        {  
          m_Money   =   value;  
        }  
      }  
   
      public   void   玩游戏()  
      {  
        Console.WriteLine("小张开始玩游戏了.....");  
        Console.WriteLine("小张:CS好玩,哈哈哈!   我玩.....");  
        System.Threading.Thread.Sleep(500);  
        System.EventArgs   e   =   new   EventArgs();  
        OnPlayGame(e);  
      }  
   
      protected   virtual   void   OnPlayGame(EventArgs   e)  
      {  
        if(PlayGame   !=   null)  
        {  
          PlayGame(this,e);  
        }  
      }  
    }  
   
    //   定义委托处理程序  
    public   delegate   void   PlayGameHandler(object   sender,System.EventArgs   e);  
  }  
   
   
  如果对大家有帮助大家就顶一个,如果觉得对您来说这太菜了。那说明是我太菜了。呵呵。因为我本来就很菜。想再学学。。恩。。N天后结帖。。 问题点数:160、回复次数:51Top

1 楼brando_beat(Eの懒龙)回复于 2005-06-20 09:24:01 得分 5

沙发Top

2 楼LionWangCity(完美生活)回复于 2005-06-20 09:24:56 得分 5

谢谢!板凳,接分!Top

3 楼LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)回复于 2005-06-20 09:25:44 得分 5

还推荐大家一系列文章:  
  http://blog.joycode.com/percyboy/archive/2005/01/22/43438.aspxTop

4 楼CMIC(大象)回复于 2005-06-20 09:31:39 得分 5

不错,自定义事件的入门例子Top

5 楼hedonister(冰戈)回复于 2005-06-20 09:33:52 得分 5

谢谢分享Top

6 楼zhanqiangz(闲云野鹤-Overriding)回复于 2005-06-20 09:34:34 得分 3

^_^Top

7 楼Technologytomorrow(轩辕白)回复于 2005-06-20 09:36:11 得分 5

好!Top

8 楼Jinglecat(晓风残月)回复于 2005-06-20 09:38:19 得分 4

学习ing,  
  学习.net也不短了,还真是没搞懂delegateTop

9 楼WeekZero(∮小气的鬼∮)回复于 2005-06-20 09:38:47 得分 3

谢谢了,学习一下Top

10 楼fphuang(人在哈尔滨·四月)回复于 2005-06-20 09:38:53 得分 3

向大侠学习!~Top

11 楼SunRisingWang(旭日)回复于 2005-06-20 09:39:21 得分 3

谢谢了,jfTop

12 楼LaoDai_Net(『老代』)回复于 2005-06-20 09:43:12 得分 3

MarkTop

13 楼coveking(小草)回复于 2005-06-20 09:43:43 得分 3

^_^   好好收藏Top

14 楼WeekZero(∮小气的鬼∮)回复于 2005-06-20 09:46:06 得分 3

好好学习一下Top

15 楼ye_zi(行到水穷处·坐看云起时)回复于 2005-06-20 09:48:06 得分 3

mark,goodTop

16 楼jehon(没车步行中。。。)回复于 2005-06-20 09:50:15 得分 3

markTop

17 楼xtxk_917(小强)回复于 2005-06-20 09:53:48 得分 3

!Top

18 楼biao88482005(飚)回复于 2005-06-20 09:54:02 得分 3

谢谢Top

19 楼luckyprg(lucky)回复于 2005-06-20 10:07:39 得分 3

已加入收藏!Top

20 楼ixingarden(心愿)回复于 2005-06-20 10:29:41 得分 3

已收藏!  
  谢谢楼主!Top

21 楼goody9807(http://goody9807.cnblogs.com)回复于 2005-06-20 10:33:01 得分 3

谢谢分享~~~Top

22 楼bidisty(浪漫草)回复于 2005-06-20 11:27:01 得分 3

很好Top

23 楼fox7805034(肚子饿了)回复于 2005-06-20 11:46:14 得分 3

好..支持!!!!Top

24 楼renyu732(Sysinfo)回复于 2005-06-20 13:17:04 得分 3

谢谢分享Top

25 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-06-20 14:20:30 得分 0

谢谢各位的支持.呵呵..Top

26 楼loveyzy(菌哥)回复于 2005-06-20 14:37:53 得分 3

好例子!Top

27 楼codeangel(http://www.wSoft.Net)回复于 2005-06-20 14:51:29 得分 3

好例子  
  前些日子我写了手机短信的东西,  
  先是启动短信检测线程  
  若扑捉到发来短信,就用委托将收来的信息用事件抛出到文件并解码。  
  感觉没问题   
  但是写成com+就有问题了。Top

28 楼65963(MONDEO)回复于 2005-06-20 15:05:54 得分 3

谢谢Top

29 楼JzeroBiao(先知)回复于 2005-06-20 15:20:35 得分 3

顶了再睇....Top

30 楼jhtchina(学习构架设计)回复于 2005-06-20 15:22:22 得分 3

markTop

31 楼ghchen()回复于 2005-06-20 15:26:20 得分 3

谢谢Top

32 楼hedonister(冰戈)回复于 2005-06-20 15:27:31 得分 3

收藏到我的blog上了,hackate不介意吧,呵呵  
  http://www.cnblogs.com/hedonister/articles/177747.htmlTop

33 楼xn000(涵夫)回复于 2005-06-20 15:34:09 得分 3

分享是一种快乐  
  Top

34 楼dragonfly001(I want to fly!)回复于 2005-06-20 15:46:07 得分 3

謝謝......Top

35 楼zkjp()回复于 2005-06-20 16:06:39 得分 3

高手帮忙解答下...  
   
  委托事件=自定义事件?Top

36 楼lj9969(恋燕侠)回复于 2005-06-20 16:13:59 得分 3

学习ing..  
   
  Good   Good   Study..  
   
  Day   Day   Up..Top

37 楼ieooo(Jet)回复于 2005-06-20 16:26:49 得分 3

好东东Top

38 楼zhouabc(试着专业一点)回复于 2005-06-20 21:31:32 得分 3

 
  谢谢楼主.Top

39 楼morality(业精于勤,行成于思!)回复于 2005-06-20 22:29:42 得分 3

多谢共享!Top

40 楼Dluxd()回复于 2005-06-21 08:23:41 得分 3

学习Top

41 楼liuzxit(dotnetRGB.com)回复于 2005-06-21 08:32:18 得分 3

很有幫助,收藏Top

42 楼pclogic(跃虹鸟)回复于 2005-06-21 08:39:01 得分 3

markTop

43 楼lzdjoa(西边)回复于 2005-06-21 08:56:15 得分 3

先顶一下,过后再看Top

44 楼bgu(彼岸)回复于 2005-06-21 09:01:58 得分 3

不错。  
  只是看到有点昏.......  
   
  再找本书看看先。Top

45 楼xzq686(★_瞬_★)回复于 2005-06-21 09:03:38 得分 3

楼主兄弟.好人呀..Top

46 楼renyu732(Sysinfo)回复于 2005-06-21 09:05:03 得分 3

markTop

47 楼funnystar(不变的承诺)回复于 2005-06-21 09:15:58 得分 3

markTop

48 楼czm303204(阿朗)回复于 2005-06-21 09:18:11 得分 3

好人那。Top

49 楼yangyu112654374(Spaceman)回复于 2005-06-21 10:40:00 得分 3

学习~~~~~`Top

50 楼rhs(释放自己)回复于 2005-06-21 12:53:15 得分 3

呵~~  
  不错,多谢!Top

51 楼HJ_34(刺桐游子)回复于 2005-07-01 16:15:11 得分 0

UPTop

相关问题

  • C#的委托和事件处理学习
  • 委托和事件
  • 关于事件委托...
  • 关于事件委托
  • 关于事件和委托
  • 事件委托的问题。。
  • 委托与事件(散分)
  • 求学习hibernate的例子
  • 关于事件、委托的理解
  • 如何追加事件委托?

关键词

  • .net
  • 委托
  • 学习
  • 游戏
  • eateventargs
  • eateventhandler
  • eatevent
  • 事件
  • moneyout
  • qinshihuang

得分解答快速导航

  • 帖主:hackate
  • brando_beat
  • LionWangCity
  • LoveCherry
  • CMIC
  • hedonister
  • zhanqiangz
  • Technologytomorrow
  • Jinglecat
  • WeekZero
  • fphuang
  • SunRisingWang
  • LaoDai_Net
  • coveking
  • WeekZero
  • ye_zi
  • jehon
  • xtxk_917
  • biao88482005
  • luckyprg
  • ixingarden
  • goody9807
  • bidisty
  • fox7805034
  • renyu732
  • loveyzy
  • codeangel
  • 65963
  • JzeroBiao
  • jhtchina
  • ghchen
  • hedonister
  • xn000
  • dragonfly001
  • zkjp
  • lj9969
  • ieooo
  • zhouabc
  • morality
  • Dluxd
  • liuzxit
  • pclogic
  • lzdjoa
  • bgu
  • xzq686
  • renyu732
  • funnystar
  • czm303204
  • yangyu112654374
  • rhs

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo