|
楼主 |
发表于 2013-5-3 20:58:33
|
显示全部楼层
Ausing System;
using System.Collections.Generic;
using System.Text;
namespace Delegate
{
// 热水器
public class Heater
{
private int temperature;
public delegate void BoilHandler(int param); // 1 声明委托
public event BoilHandler BoilEvent; // 2 声明事件
public void BoilWater() // 烧水 3 定义引发一个事件的方法。
{
Console.WriteLine("开始烧水了!");
for (int i = 95; i <= 100; i++)
{
temperature = i;
System.Threading.Thread thr = System.Threading.Thread.CurrentThread;
//阻塞当前线程2秒
System.Threading.Thread.Sleep(2000);
if (temperature > 95)
{
if (BoilEvent != null)
{ //如果有对象注册
BoilEvent(temperature); // 达到某条件 4 引发一个事件
}
}
}
}
}
// 警报器
public class Alarm
{
public void MakeAlert(int param) // 5 定义事件处理程序。
{
Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:", param);
}
}
// 显示器
public class Display
{
public void ShowMsg(int param) // 5 定义事件处理程序。
{ //静态方法
Console.WriteLine("Display:水快烧开了,当前温度:{0}度。", param);
}
}
class Program
{
static void Main()
{
Heater heater = new Heater();
Alarm alarm = new Alarm();
heater.BoilEvent += alarm.MakeAlert; // 6 订阅事件
Display disp = new Display();
heater.BoilEvent += disp.ShowMsg; // 6 订阅事件
heater.BoilWater(); //烧水,会自动调用注册过对象的方法
}
}
}
|
|