委托事件实用实例
来源:互联网 发布:禾虫焗蛋 知乎 编辑:程序博客网 时间:2024/05/16 11:00
朋友面试居然遇到这种题目 囧!
委托事件
假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候:1、扬声器会开始发出语音,告诉你水的温度;2、液晶屏也会改变水温的显示,来提示水已经快烧开了。现在我们需要写个程序来模拟这个烧水的过程,我们将定义一个类来代表热水器,我们管它叫:Heater,它有代表水温的字段,叫做temperature;当然,还有必不可少的给水加热方法BoilWater(),一个发出语音警报的方法MakeAlert(),一个显示水温的方法,ShowMsg()。
答案
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, BoliedEventArgs e);
public event BoiledEventHandler Boiled; //声明事件
// 定义BoliedEventArgs类,传递给Observer所感兴趣的信息
public class BoliedEventArgs : EventArgs
{
public readonly int temperature;
public BoliedEventArgs(int temperature)
{
this.temperature = temperature;
}
}
// 可以供继承自 Heater 的类重写,以便继承类拒绝其他对象对它的监视
protected virtual void OnBolied(BoliedEventArgs e)
{
if (Boiled != null)
{ // 如果有对象注册
Boiled(this, e); // 调用所有注册对象的方法
}
}
// 烧水。
public void BoilWater()
{
for (int i = 0; i <= 100; i++)
{
temperature = i;
if (temperature > 95)
{
//建立BoliedEventArgs 对象。
BoliedEventArgs e = new BoliedEventArgs(temperature);
OnBolied(e); // 调用 OnBolied方法
}
}
}
}
// 警报器
public class Alarm
{
public void MakeAlert(Object sender, Heater.BoliedEventArgs 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.BoliedEventArgs 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(); //烧水,会自动调用注册过对象的方法
}
}
}
www.gouid.com 购id网
- 委托事件实用实例
- 委托,事件实例(转摘)
- 事件委托实例
- C# 委托,事件 实例
- C# 委托,事件 实例
- 事件委托,附实例
- 实例分析:事件与委托
- 委托和事件实例学习
- javascript中的事件委托实例
- JS之事件委托实例
- C#委托事件应用实例
- 【C#】委托和事件实例
- 委托实例(delegate实例+事件委托通知)
- 通过实例具体讲述事件委托
- 简单实例说明委托和事件。
- 精彩的委托和事件实例
- C# 事件模型(基于委托)实例参考
- C#委托事件定义调用实例
- .NET 2.0 中使用Active Directory 应用程序模式 (ADAM)
- 我的 Windows Vista 上安装的工具
- 中国牛市话股市投资
- 微软挖角IBM ,怎么看?
- 十天学会php之第一天
- 委托事件实用实例
- Google真好,这么多的工具……
- 超酷的一个Blog
- iFolder Novell开源文件服务器
- IronPython引出微软“秘密计划”
- MTK UCM incoming call
- 最高法院明确反向工程合法 腾讯诉PICA恐生变
- 微软软件 - Office Accounting
- Novell 发布Mono 1.2 推动.NET跨平台