委托的前世今生

 1 namespace Heater
 2 {
 3     //热水器
 4     public class Heater{
 5         private int temperature; //水温
 6         public delegate void BoilHander(int param);
 7         public event BoilHander BoilEvent;
 8 
 9         // 烧水
10         public void BoilWater() {
11             for (int i = 0; i <= 100; i++) {
12                 temperature = i;
13 
14                 if (temperature > 95) {
15                     if (BoilEvent != null)
16                     {
17                         BoilEvent(temperature);
18                     }
19                 }
20             }
21         }
22     }
23    
24     public class Alarm{
25         //发出语音警报
26         public void MakeAlert(int param) {
27             Console.WriteLine("Alarm: 嘀嘀嘀,水已经{0}度了:",param);
28         }
29     }
30 
31     public class Display {
32         //显示水温
33         public static void ShowMsg(int param)
34         {
35             Console.WriteLine("Alarm: 水快开了,当前温度{0}度:", param);
36         }
37     }
38 
39     class Program
40     {
41         static void Main(string[] args)
42         {
43             Heater heater = new Heater();
44             Alarm alarm = new Alarm();
45 
46             heater.BoilEvent += alarm.MakeAlert;
47             heater.BoilEvent += (new Alarm()).MakeAlert;
48             heater.BoilEvent += Display.ShowMsg;
49             heater.BoilWater();
50             Console.ReadLine();
51         }
52     }
53 }
54 
.Net Framework规范
 1 
 2 namespace Heater
 3 {
 4     //热水器
 5     public class Heater{
 6         private int temperature; //水温
 7         public string type = "RealFire001";  //添加型号作为演示
 8         public string area = "China XiAn";  //添加产地作为演示
 9         //声明委托
10         public delegate void BoiledEventHander(Object sender,BoiledEventArgs e);
11         public event BoiledEventHander Boiled;
12 
13         //定义BoiledEventArgs类,传递给Object所感兴趣的信息
14         public class BoiledEventArgs : EventArgs {
15             public readonly int temperature;
16             public BoiledEventArgs(int temperature) {
17                 this.temperature = temperature;
18             }
19         }
20 
21         //可以供继承自Heater的类重写,以便继承类拒绝其他对象对它的监视
22         protected virtual void OnBoiled(BoiledEventArgs e) {
23             if (Boiled != null) {
24                 Boiled(this,e);
25             }
26         }
27         // 烧水
28         public void BoilWater() {
29             for (int i = 0; i <= 100; i++) {
30                 temperature = i;
31 
32                 if (temperature > 95) {
33                     BoiledEventArgs e = new BoiledEventArgs(temperature);
34                     OnBoiled(e);
35                 }
36             }
37         }
38     }
39    
40     //警报器
41     public class Alarm{
42         //发出语音警报
43         public void MakeAlert(Object sender,Heater.BoiledEventArgs e) {
44             Heater heater = (Heater)sender;
45             Console.WriteLine("Alarm:{0}-{1}:",heater.area,heater.type);
46             Console.WriteLine("Alarm: 嘀嘀嘀,水已经{0}度了:",e.temperature);
47             Console.WriteLine();
48         }
49     }
50 
51     public class Display {
52         //显示水温
53         public static void ShowMsg(Object sender,Heater.BoiledEventArgs e)
54         {
55             Heater heater = (Heater)sender;
56             Console.WriteLine("Display:{0}-{1}:",heater.area,heater.type);
57             Console.WriteLine("Alarm: 水快开了,当前温度{0}度:", e.temperature);
58         }
59     }
60 
61     class Program
62     {
63         static void Main(string[] args)
64         {
65             Heater heater = new Heater();
66             Alarm alarm = new Alarm();
67 
68             heater.Boiled += alarm.MakeAlert;
69             heater.Boiled += new Heater.BoiledEventHander(alarm.MakeAlert);
70             heater.Boiled += Display.ShowMsg;
71             heater.BoilWater();
72             Console.ReadLine();
73         }
74     }
75 }
76 
原文地址:https://www.cnblogs.com/mingle/p/delegate0.html