事件委托

it2025-12-27  13

using System;using System.Collections.Generic;using System.Text;

namespace Delegate { // 热水器 public class Heater {  private int temperature;  public string type = "RealFire 001";  // 添加型号作为演示  public string area = "China Xian";   // 添加产地作为演示

  public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e); //声明委托  public event BoiledEventHandler Boiled; //声明事件

  // 定义BoiledEventArgs类,传递给Observer所感兴趣的信息  public class BoiledEventArgs : EventArgs {   public readonly int temperature;   public BoiledEventArgs(int temperature) {    this.temperature = temperature;   }  }

  // 可以供继承自 Heater 的类重写,以便继承类拒绝其他对象对它的监视  protected virtual void OnBolied(BoiledEventArgs e) {   if (Boiled != null) { //如果有对象注册    Boiled(this, e);  //调用所有注册对象的方法   }  }    // 烧水。  public void BoilWater() {   for (int i = 0; i <= 100; i++) {    temperature = i;    if (temperature > 95) {     BoiledEventArgs e = new BoiledEventArgs(temperature);     OnBolied(e);    }   }  } }

 // 警报器 public class Alarm {  public void MakeAlert(Object sender, Heater.BoiledEventArgs e) {   Heater heater = (Heater)sender;  //这里是不是很熟悉呢?   //访问 sender 中的公共字段   Console.WriteLine("Alarm:{0} - {1}: ", heater.area, heater.type);   Console.WriteLine("Alarm: 嘀嘀嘀,水已经 {0} 度了:", e.temperature);   Console.WriteLine();  }

 }

 // 显示器 public class Display {  public static void ShowMsg(Object sender, Heater.BoiledEventArgs e) { //静态方法   Heater heater = (Heater)sender;   Console.WriteLine("Display:{0} - {1}: ", heater.area, heater.type);   Console.WriteLine("Display:水快烧开了,当前温度:{0}度。", e.temperature);   Console.WriteLine();  } }

 class Program {  static void Main() {   Heater heater = new Heater();   Alarm alarm = new Alarm();

   heater.Boiled += alarm.MakeAlert; //注册方法   heater.Boiled += (new Alarm()).MakeAlert;  //给匿名对象注册方法   heater.Boiled += new Heater.BoiledEventHandler(alarm.MakeAlert); //也可以这么注册   heater.Boiled += Display.ShowMsg;  //注册静态方法

   heater.BoilWater(); //烧水,会自动调用注册过对象的方法  } }

本文为转载

 

 

转载于:https://www.cnblogs.com/wolfcool/archive/2009/06/16/1504576.html

最新回复(0)