分享

【C#】C#委托和事件的实例讲解

 雪柳花明 2016-10-28
[csharp] view plain copy
  1. using System;  
  2.   
  3. namespace delegate_event  
  4. {  
  5.     // 定义一个猫类  
  6.     class Cat  
  7.     {  
  8.         // 定义一个名字字段  
  9.         private string name;  
  10.         // 创建构造函数,参数为string,给小猫一个初始的名字  
  11.         // 如果初始化的时候不写名字会报错,除非再写一个重载  
  12.         public Cat (string name)  
  13.         {  
  14.             this.name = name;  
  15.         }  
  16.         // 定义一个委托,名字随便起  
  17.         public delegate void CatShoutDelegate ();  
  18.         // 定义一个事件,事件的类型是委托的名字  
  19.         public event CatShoutDelegate CatShoutEvent;  
  20.         // 定义一个猫叫的方法  
  21.         public void Shout ()  
  22.         {  
  23.             Console.WriteLine ("喵~,我是{0}", name);  
  24.             // 当执行猫叫的方法的时候,会判断委托的实例对象是否存在  
  25.             // 当存在实例对象的时候,表示事件已经发生了  
  26.             // 这个时候就该执行被委托的方法了,main函数中是委托的什么方法就执行什么方法  
  27.             if (CatShoutEvent != null) {  
  28.                 // 执行事件的委托,就是间接的执行2只老鼠的Run方法  
  29.                 CatShoutEvent();  
  30.             }  
  31.         }  
  32.   
  33.     }  
  34.   
  35.     class Mouse  
  36.     {  
  37.         private string name;  
  38.   
  39.         public Mouse (string name)  
  40.         {  
  41.             this.name = name;  
  42.         }  
  43.   
  44.         public void Run ()  
  45.         {  
  46.             Console.WriteLine ("快跑!" + name+"老猫来了!");  
  47.         }  
  48.     }  
  49.       
  50.     class MainClass  
  51.     {  
  52.         public static void Main (string[] args)  
  53.         {  
  54.               
  55.             Cat cat1 = new Cat ("Tom");  
  56.             Mouse mouse1 = new Mouse ("Jerry");  
  57.             Mouse mouse2 = new Mouse ("Jack");  
  58.             // 表示将Mouse1的Run的方法通过实例委托给CatShoutDelegate登记到猫的事件CatShoutEvent里面。+=就是添加事件的意思  
  59.             cat1.CatShoutEvent += new Cat.CatShoutDelegate (mouse1.Run);  
  60.             cat1.CatShoutEvent += new Cat.CatShoutDelegate (mouse2.Run);  
  61.             cat1.Shout();  
  62.             Console.Read();       
  63.       
  64.               
  65.         }  
  66.     }  
  67.       
  68.   
  69. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多