关于C#中的委托和事件的个人理解
以前一直搞不懂委托和事件,平时用的也少,最近看看了篇文章总算感觉是略懂了
一、委托 其实就像一个 函数指针
使用委托一般如下步骤
1、先定义一 个 委托 类型 如 public delegate void Notify(int temperature);
2、实例化一个委托 public Notify NF = null;
3、实现一个 和1中定义委托 函数签名保持一致的方法 public void DelegateTest(int temperature)
4、将3中实现的方法指向 实例的委托 NF=DelegateTest;指向通过 “=”操作符实现 利用多 播委托的性质可以实现 多个 串联处理 多个处理 用”+“操作符实现
个人认为委托的好处就是 自身在处理 数据时 可以把数据 提供给 其他实现者处理 完数据后,再把数据 返回给自己继续后面的处理
二、事件 是一种基制 当发生某事后,通知其他需要知道此事的 对象 这个对象 作出相应的 反应
1、先定义一个 委托 如 public delegate void BoiledEventHandler(Object sender, BoiledEventArgs e); 系统的EventArgs 不带数据继承 此类后可 在通知其他对象时 告诉对象 一些有用的数据
2、再申明一个事件 用Event 关键字 public event BoiledEventHandler Boiled; //声明事件
3、在特定的满足某条件时,触发这个事件
// 可以供继承自 Heater 的类重写,以便继承类拒绝其他对象对它的监视
protected virtual void RaiseBoiledEvent(BoiledEventArgs e)
{
if (Boiled != null)
{ // 如果有对象注册
Boiled(this, e); // 调用所有注册对象的方法
}
}
4、在接收需要处理这个事件时 定义一个 收到事件时 作出相应动作的 方法 和委托 保持一致的 函数签名
public void OnBoiledEvent(Object sender, BoiledEventArgs e)
{
NF(e.CurrentTemperature);
}
5、在事件未发生前绑定 这个事件发生时 需要接收事件 并处理的对象 绑定通过 “+=”操作符,有多个处理就进行多次绑定
如
heater.Boiled+=new Heater.BoiledEventHandler(alarm.OnBoiledEvent);
posted on 2013-12-23 12:56 DreamOnTheGo 阅读(212) 评论(0) 编辑 收藏 举报