用C#中的委托和事件简单实现观察者模式
2012-09-03 15:41
609 查看
天轰川视频在20多集的时候提到了委托,第一次学楚广明C#的时候对这块了解不深,这次把这块好好了解了下,算对这块有个入门级的认识。
首先看官方对委托的定义(出自MSDN):委托是一种定义方法签名的类型,用于将方法作为参数传递给其他方法。事件处理程序就是通过委托调用的方法。
我的理解:委托封装了方法,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。
用C#中的委托和事件简单的实现观察者模式是我在学习别人的博客中跟着敲的小例子,如下:
这是一个模拟烧水的过程,我们将定义一个类来代表热水器,我们管它叫:Heater,它有代表水温的字段,叫做temperature;当然,还有必不可少的给水加热方法BoilWater()。定义一个报警器类Alarm,它有一个发出语音警报的方法MakeAlert()。一个现实板类Display,有一个显示水温的方法,ShowMsg()。
首先看官方对委托的定义(出自MSDN):委托是一种定义方法签名的类型,用于将方法作为参数传递给其他方法。事件处理程序就是通过委托调用的方法。
我的理解:委托封装了方法,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。
用C#中的委托和事件简单的实现观察者模式是我在学习别人的博客中跟着敲的小例子,如下:
这是一个模拟烧水的过程,我们将定义一个类来代表热水器,我们管它叫:Heater,它有代表水温的字段,叫做temperature;当然,还有必不可少的给水加热方法BoilWater()。定义一个报警器类Alarm,它有一个发出语音警报的方法MakeAlert()。一个现实板类Display,有一个显示水温的方法,ShowMsg()。
namespace Delegate { class Program { //定义热水器类 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; //如果水温超过95度,执行绑定到事件上的方法 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); } } static void Main(string[] args) { Heater ht = new Heater(); Alarm alarm = new Alarm(); //将警报器和现实板(监视者Oberser)的方法绑定到热水器(监视对象Subject)的事件上 ht.BoilEvent += alarm.MakeAlert; //注册方法 ht.BoilEvent += (new Alarm()).MakeAlert; //注册匿名对象的方法 ht.BoilEvent += Display.ShowMsg; //注册静态方法 ht.BoilWater(); //加热水,会自动调用注册过的对象的方法 } } }
相关文章推荐
- C#中使用委托和事件实现观察者模式(observer pattern)
- C#中使用委托和事件实现观察者模式(observer pattern)
- C#固定时间执行指定事件(观察者模式+异步委托)
- C# 中的委托和事件 以及观察者模式
- c#观察者模式和事件委托的联合使用
- [转]C# 中的委托和事件 + 观察者模式
- C# ~ 从 委托事件 到 观察者模式 - Observer
- C# 中的委托和事件 以及观察者模式
- Unity之C#——委托与事件,观察者模式,猫和老鼠事例
- C# ~ 从 委托事件 到 观察者模式
- C#基础系列——委托实现简单设计模式
- c#委托,事件及观察者模式(转自:http://www.cnblogs.com/JimmyZhang/archive/2011/12/25/903360.html)
- 委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别
- C#、最简单、事件委托、订阅事件、订阅者模式
- 在C#中使用代理(即委托)的方式触发事件(观察者模式)
- C#中委托和事件在观察者模式中的应用实例
- 事件委托实现观察者模式
- Unity3D 利用C#实现简单的代理模式Delegate(委托)
- 单例模式+观察者模式,60行代码简单实现事件总线。
- .net2005(C#)下实现事件和委托的简单示例