关于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编辑  收藏  举报