• 关于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);

  • 相关阅读:
    spring无法接收上传文件
    springcloud feign增加熔断器Hystrix
    mybatis调用存储过程(@Select方式)
    spring在注解标注的方法上加切面
    java注解Annotation
    java包装类
    JZ-C-43
    JZ-C-42-Plus
    JZ-C-42
    JZ-C-41-Plus
  • 原文地址:https://www.cnblogs.com/browser/p/3487258.html
Copyright © 2020-2023  润新知