事件与委托的简单应用
刚刚看完委托与事件,故发个例子实现一下,牢固记忆,也帮助暂时未能理解的朋友.
在以下的例子里,我们简单的实现了事件与委托之间的联接,
对于委托,我们可以这样想,他可以是一个C++中的函数指针,但在C#里面为了类型安全等因素,委托便应运而生。
委托能够想对待变量一样的对待方法。
对于事件,Windows窗体的编程模型基于事件,这是微软的解释。我本人也没什么自己的看法....
而在学习模式的同时,我们也能发现,对于这样的发布者与订阅者之间的关系,刚好也能体现了我们的"观察者"模式.
所谓的"观察者"模式又叫发布与订阅模式,
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。(以上定义转自:大话设计模式)
namespace eventMyWeather
{
enum Weather{
星期一潮湿 = 1,
星期二天晴,
星期三雨,
星期四天晴,
星期五暴雨,
星期六雷暴,
星期天天晴
}
/// <summary>
/// 创建发布者类
/// </summary>
class weatherPublish
{
Weather w; //声明枚举变量以存储天气
public delegate void Publish(Weather w); //创建委托
public event Publish Pub = null; //创建以Publish为委托的事件
public weatherPublish() //构造函数,获取当前天气
{
w = new Weather();
w = (Weather)Convert.ToInt32(DateTime.Now.DayOfWeek);
//Console.WriteLine(w);
}
public void onPain() //发布天气
{
if (Pub != null){
Console.WriteLine("气象台发布天气!");
Pub(w);
}
}
}

/// <summary>
/// 创建订阅者类
/// </summary>
class subScriber //创建订阅者
{
private string name;
public subScriber(string name)
{
this.name = name;
}
public void reciveWeather(Weather w)
{
Console.WriteLine(name+"订阅天气!");
Console.WriteLine("当前天气为:"+w);
Console.ReadLine();
}
}
/// <summary>
/// 发布与订阅的实例
/// </summary>
class CCTV
{
static void Main(string[] args)
{
weatherPublish wp = new weatherPublish();
subScriber zs = new subScriber("张三"); //创建订阅者
subScriber ls = new subScriber("李四");
wp.Pub += new weatherPublish.Publish(zs.reciveWeather); //张三订阅天气预报
wp.Pub += new weatherPublish.Publish(ls.reciveWeather); //李四订阅天气预报
wp.onPain();
}
}
}

浙公网安备 33010602011771号