zoukankan      html  css  js  c++  java
  • 关于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);

  • 相关阅读:
    关于ueditor1.4.3版复制section标签丢失class和style样式问题
    关于移动手机端富文本编辑器qeditor图片上传改造
    移动web HTML5使用photoswipe模仿微信朋友圈图片放大浏览
    PLSQL Developer如何设置自动打开上次编辑的文件
    Linux目录结构
    git与代码托管工具
    mysql的索引
    Gson学习记录
    java线程池的初探
    netty学习总结(一)
  • 原文地址:https://www.cnblogs.com/browser/p/3487258.html
Copyright © 2011-2022 走看看