日期:2014-05-17 浏览次数:20989 次
假设我们有个高档的热水器(Heater),我们给它通上电,当水温超过95度的时候:1、扬声器(Alarm)会开始发出语音,告诉你水的温度;2、液晶屏(Display)也会改变水温的显示,来提示水已经快烧开了。
可以建立如下事件与委托(在控制台下实现):
Heater.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { public class Heater { int temperature; public string bread = "007"; public delegate void Handle(object obj,BoiledEventArgs e); public event Handle Boiled; public class BoiledEventArgs:EventArgs { public readonly int temperature; public BoiledEventArgs(int temperature) { this.temperature = temperature; } } protected virtual void OnBoiled(BoiledEventArgs e) { if (Boiled != null) Boiled(this, e); } public void BoilWater() { for (int i = 0; i <= 100; i++) { temperature = i; if (temperature > 95) { if (Boiled != null) { BoiledEventArgs e = new BoiledEventArgs(temperature); OnBoiled(e); } } } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { public class Display { public static void ShowMsg(object obj,Heater.BoiledEventArgs e) { Heater heater = (Heater)obj; Console.WriteLine("{0}:警告:水已经{1}度了!!", heater.bread, e.temperature.ToString()); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { public class Alarm { public void MakeAlert(object obj, Heater.BoiledEventArgs e) { Heater heater = (Heater)obj; Console.WriteLine("{0}:水已经{1}度了!", heater.bread, e.temperature.ToString()); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Heater heater = new Heater(); Alarm alarm=new Alarm(); heater.Boiled += alarm.MakeAlert; heater.Boiled += Display.ShowMsg; heater.BoilWater(); Console.ReadKey(); } } }