委托与事件小demo

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了委托与事件小demo相关的知识,希望对你有一定的参考价值。

  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的主要内容,如果未能解决你的问题,请参考以下文章

javaScript绑定事件委托 demo

JavaScript中冒泡与事件委托

C#委托与事件的简单使用

C# 事件与委托

对“xxx”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。 错误解决一例。(代码片段

js中的事件委托/代理