委托

  1 namespace DelegateDemo
  2 {
  3     delegate  void HeaterDelegate(int t);
  4 
  5     class Heater
  6     {
  7         private int temperature;
  8         // 烧水 
  9         //给委托heaterDel加上事件修饰符
 10          //event:事件,事件:是被event关键字修饰的委托变量,被event关键字修饰的委托变量,在类的外部只能出现在+=的左侧。也就是只能在类的外部被挂载方法,而不能直接调用
 11         public event HeaterDelegate heaterDel;
 12 
 13         public void BoilWater()
 14         {
 15             for (int i = 0; i <= 100; i++)
 16             {
 17                 temperature = i;
 18                 if (i >= 90)
 19                 {
 20                     if (heaterDel != null)
 21                     {
 22                         heaterDel(temperature);
 23                     }
 24                 }
 25             }
 26         }
 27     }
 28      abstract class LongXia
 29     {
 30         public abstract void Tongzhi(int t);
 31     }
 32      class Longzi:LongXia
 33     {
 34         string name;
 35         public Longzi(string n)
 36         {
 37             name = n;
 38         }
 39         Display d = new Display();
 40         public override void Tongzhi(int wendu)
 41         {
 42             d.ShowMsg(wendu, name);
 43         }
 44     }
 45         class Display
 46     {
 47         public void ShowMsg(int param, string n)
 48         {
 49             Console.WriteLine("Display:水已烧开,当前温度:{0}度。{1}同志", param, n);
 50         }
 51     }
 52     class Alarm
 53     {
 54         public void MakeAlert(int param, string who)
 55         {
 56             Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:{1}同志", param, who);
 57         }
 58     }
 59     class Xiazi:LongXia
 60     {
 61         private string name;
 62         Alarm a = new Alarm();
 63         public Xiazi(string n)
 64         {
 65             this.name = n;
 66         }
 67         public override void Tongzhi(int wendu)
 68         {
 69             a.MakeAlert(wendu, name);
 70         }
 71     class Program
 72     {
 73        
 74         //////////////////////////////////////////////
 75 
 76         static void Main(string[] args)
 77         {
 78             Longzi xiaoluobutou = new Longzi("萝卜头");
 79             Longzi luobutou = new Longzi("萝卜头");
 80 
 81             Xiazi xia = new Xiazi("看不见");
 82 
 83             Heater h = new Heater();
 84 
 85            
 86 
 87             //h.heaterDel = xiaoluobutou.Tongzhi;
 88             h.heaterDel += xiaoluobutou.Tongzhi;
 89             h.heaterDel += luobutou.Tongzhi;
 90             h.heaterDel += xia.Tongzhi;
 91 
 92            
 93             h.BoilWater();
 94 
 95             //存在在热水器外面调用通知的可能的问题得到解决。
 96             h.heaterDel(100);
 97         }
 98     }
 99     }
100 }

 

posted @ 2018-11-10 09:22  冬夜的火  阅读(126)  评论(0编辑  收藏  举报