zoukankan      html  css  js  c++  java
  • 委托的前世今生

     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 
  • 相关阅读:
    linux c++ 实现http请求
    pip 换源
    Web API接口
    DRF框架知识总览
    jq+bs插件
    element-ui插件
    axios插件
    前端存储数据汇总
    Vuex插件
    全局配置css和js
  • 原文地址:https://www.cnblogs.com/mingle/p/delegate0.html
Copyright © 2011-2022 走看看