温故委托
2010-08-02 19:49 三皮开发时 阅读(171) 评论(0) 编辑 收藏 举报
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class HandlerEventArgs
{
}
//定义事件数据类
public class BoiledEventArgs : EventArgs
{
public readonly int temperature;
public BoiledEventArgs(int temperature)
{
this.temperature = temperature;
}
}
public delegate void BoiledEventHandler(object sender, BoiledEventArgs e);//定义委托
public class Heater
{
private int temperature;
public string type = "RealFire 001";//添加更多的属性,除了温度,这里的字段描述是:型号
public string area = "China Xian";//添加产地作为演示
public event BoiledEventHandler Boiled;//声明事件
//可以供继承自 Heater 的类重写,以便继承类拒绝其他对象对它的监视
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)
{
BoiledEventArgs e = new BoiledEventArgs(temperature);
OnBoiled(e);//调用OnBoiled
}
}
}
}
//警报器
public class Alarm
{
public void MakeAlert(object sender, BoiledEventArgs e)
{
Heater heater = (Heater)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, BoiledEventArgs e)
{
Heater heater = (Heater)sender;
Console.WriteLine("Display:{0}-{1}:", heater.area, heater.type);
Console.WriteLine("Display:水快烧开了,当前温度:{0}度。", e.temperature);
Console.WriteLine();
}
}
public class Entrance : Heater
{
static void Main(string[] args)
{
Heater heater = new Heater();
Alarm alarm = new Alarm();
heater.Boiled += alarm.MakeAlert;//注册方法
heater.Boiled += new Alarm().MakeAlert;//给匿名方法注册方法
heater.Boiled += new BoiledEventHandler(alarm.MakeAlert);//全称注册方式
heater.Boiled += Display.ShowMsg;//注册静态方法
//heater.Boiled -= alarm.MakeAlert;//注销这个方法
heater.BoilWater();//调用注册过的方法
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class HandlerEventArgs
{
}
//定义事件数据类
public class BoiledEventArgs : EventArgs
{
public readonly int temperature;
public BoiledEventArgs(int temperature)
{
this.temperature = temperature;
}
}
public delegate void BoiledEventHandler(object sender, BoiledEventArgs e);//定义委托
public class Heater
{
private int temperature;
public string type = "RealFire 001";//添加更多的属性,除了温度,这里的字段描述是:型号
public string area = "China Xian";//添加产地作为演示
public event BoiledEventHandler Boiled;//声明事件
//可以供继承自 Heater 的类重写,以便继承类拒绝其他对象对它的监视
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)
{
BoiledEventArgs e = new BoiledEventArgs(temperature);
OnBoiled(e);//调用OnBoiled
}
}
}
}
//警报器
public class Alarm
{
public void MakeAlert(object sender, BoiledEventArgs e)
{
Heater heater = (Heater)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, BoiledEventArgs e)
{
Heater heater = (Heater)sender;
Console.WriteLine("Display:{0}-{1}:", heater.area, heater.type);
Console.WriteLine("Display:水快烧开了,当前温度:{0}度。", e.temperature);
Console.WriteLine();
}
}
public class Entrance : Heater
{
static void Main(string[] args)
{
Heater heater = new Heater();
Alarm alarm = new Alarm();
heater.Boiled += alarm.MakeAlert;//注册方法
heater.Boiled += new Alarm().MakeAlert;//给匿名方法注册方法
heater.Boiled += new BoiledEventHandler(alarm.MakeAlert);//全称注册方式
heater.Boiled += Display.ShowMsg;//注册静态方法
//heater.Boiled -= alarm.MakeAlert;//注销这个方法
heater.BoilWater();//调用注册过的方法
}
}
}