求助:谁能给我一个简单明了易懂的代码,来说明事件与委托关系作者: 许庭洲 时间: 2014-7-30 10:25
//委托是类型,事件是对象;
using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate {
// 热水器
public class Heater {
private int temperature;
public delegate void BoilHandler(int param); //声明委托
public event BoilHandler BoilEvent; //声明事件
// 烧水
public void BoilWater() {
for (int i = 0; i <= 100; i++) {
temperature = i;
if (temperature > 95) {
if (BoilEvent != null) { //如果有对象注册
BoilEvent(temperature); //调用所有注册对象的方法
}
}
}
}
}
// 警报器
public class Alarm {
public void MakeAlert(int param) {
Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:", param);
}
}
// 显示器
public class Display {
public static void ShowMsg(int param) { //静态方法
Console.WriteLine("Display:水快烧开了,当前温度:{0}度。", param);
}
}
class Program {
static void Main() {
Heater heater = new Heater();
Alarm alarm = new Alarm();
heater.BoilEvent += alarm.MakeAlert; //注册方法
heater.BoilEvent += (new Alarm()).MakeAlert; //给匿名对象注册方法
heater.BoilEvent += Display.ShowMsg; //注册静态方法
heater.BoilWater(); //烧水,会自动调用注册过对象的方法
}
}
}
//-------------------------------------------------------输出为:------------------------------------------------------//
Alarm:嘀嘀嘀,水已经 96 度了:
Alarm:嘀嘀嘀,水已经 96 度了:
Display:水快烧开了,当前温度:96度。
//-------------------------------------------------------输出为:------------------------------------------------------// 作者: hujiapeng 时间: 2014-7-30 11:40
http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html ,十四期的朋友给了这个地址链接,讲的很多,还没来得及看,刚刚看了您的,从中学到了项目中没有学到了,以前用的是heater.BoilEvent += new Heater(heater_BoilEvent); //注册方法
然后,用void heater_BoilEvent(EventArgs ev)
{
·········
}
相应事件
谢谢!