码迷,mamicode.com
首页 > 其他好文 > 详细

委托与事件小demo

时间:2016-03-02 13:17:55      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

  1     /// <summary>
  2     /// 水温报警器
  3     /// </summary>
  4     public class WoterWarmEvent
  5     {
  6         /***
  7       ** 1.定义delegate对象类型,它有两个参数,第一个参数是事件发送者对象,第二个参数是事件参数类对象。
  8      * 2.定义事件参数类,此类应当从System.EventArgs类派生。如果事件不带参数,这一步可以省略。
  9      * 3.定义事件处理方法,它应当与delegate对象具有相同的参数和返回值类型。
 10      * 4.用event关键字定义事件对象,它同时也是一个delegate对象。
 11      * 5.用+=操作符添加事件到事件队列中(-=操作符能够将事件从队列中删除)。
 12      * 6.在需要触发事件的地方用调用delegate的方式写事件触发方法。
 13      * 一般来说,此方法应为protected访问限制,既不能以public方式调用,但可以被子类继承。名字是OnEventName。
 14      * 7.在适当的地方调用事件触发方法触发事件。
 15          * **/
 16 
 17         //1.定义delegate对象类型
 18         public delegate void WarmEventHandler(object sender, MyWarmEventArgs e, ref string date);
 19         //4。用event关键字定义事件对象,它同时也是一个delegate对象
 20         public event WarmEventHandler myEvent;
 21 
 22         public WoterWarmEvent()
 23         {
 24 
 25             //5. 用+=操作符添加事件到事件队列中
 26             myEvent += new WarmEventHandler(WoterWorm);
 27 
 28 
 29         }
 30 
 31         public static void Main(string[] args)
 32         {
 33 
 34             int temp = 1;
 35             for (int i = 0; i < 100; i++)
 36             {
 37                 temp = i * 3 + i * 2;
 38                 if (temp > 90)
 39                 {
 40 
 41                     MyWarmEventArgs e = new MyWarmEventArgs("海尔", "2015-12-25", "上海");
 42                     WoterWarmEvent even = new WoterWarmEvent();
 43                     string date = "";
 44                     if (even.myEvent != null)
 45                     {
 46                         even.myEvent(even, e, ref date);
 47                         //even.myEvent(even, e2, ref date);
 48                     }
 49                     Console.WriteLine("~~当前水温:" + temp + "°");
 50                     Console.WriteLine("~~报警时间:" + date);
 51                     break;
 52                 }
 53                 else
 54                 {
 55                     Console.WriteLine("~~当前水温:" + temp + "°");
 56                 }
 57 
 58             }
 59 
 60             Console.Read();
 61         }
 62 
 63 
 64         /// <summary>
 65         /// 水温警告的方法
 66         /// </summary>
 67         /// <param name="sender"></param>
 68         /// <param name="e"></param>
 69         protected void WoterWorm(object sender, MyWarmEventArgs e, ref string date)
 70         {
 71             date = DateTime.Now.ToString();
 72             Console.WriteLine("~~~~~嘀嘀嘀嘀嘀!");
 73             Console.WriteLine("~~~~~水温报警!");
 74             Console.WriteLine("信息如下:" + e.GetName() + "牌热水器,生产时间:" + e.GetDate() + ";产地:" + e.GetProduct());
 75         }
 76     }
 77 
 78 
 79 
 80 
 81     /// 2.定义事件参数类
 82     /// <summary>
 83     /// 定义事件参数类
 84     /// </summary>
 85     public class MyWarmEventArgs : EventArgs
 86     {
 87         private string name;
 88         private string date;
 89         private string product;
 90 
 91         public MyWarmEventArgs(string name, string date, string product)
 92         {
 93             this.name = name;
 94             this.date = date;
 95             this.product = product;
 96         }
 97         public string GetName()
 98         {
 99             return this.name;
100         }
101 
102         public string GetDate()
103         {
104             return this.date;
105         }
106         public string GetProduct()
107         {
108             return this.product;
109         }
110 
111     }

 

委托与事件小demo

标签:

原文地址:http://www.cnblogs.com/Yunshine-sina/p/5234328.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!