• VB6 Vb.net 为什么要用委托,为什么要用事件?个人理解.


    前面写了一些自己的体会,最近又思考了一下,委托和事件的起因. 再写一下.

    我认为 让人迷惑的 就是 为什么要使用委托,为什么要使用事件.

    之前我讲了 它们是反向调用,包括回调函数也是.

    这里 在讲一下 它们的重点:  谁调用谁的问题,是关键.

    关键 就是 谁是谁的事件,谁是谁的委托,谁是谁的回调.   一定要分清楚.

    举一个 更直观的例子, 不要 同一个程序 ,我们这次来举一个 插件的例子

    你有一个程序A使用了一个插件或 dll 或 ActiveX--插.dll, 

    1、现在  插.dll里面有一个函数:[插.录入] 需要 程序A来输入一些信息,  怎么录入? 这时候 需要一个函数,它就被成为 [插]的回调函数.

    2、插.dll里面进行了一下操作,需要通知程序A,"你的快递到了",怎么通知? 这是后就需要一个函数,它被称为 事件或者委托.

    当然 事件,委托,回调,其实都是差不多的事情.

    但是 是不是 随便写呢,肯定不行,如果随便写, 那需要录入什么? 需要通知什么? 所以需要事先约定. 这个约定 就是 事件定义\委托定义\回调定义(可能没有,但你必须按照回调格式去写否则出错)

    这个定义 是 在 插.dll里面, 

    然后 在你的程序A中进行声明.声明的意思就是 :我按照 你的约定来.

    然后 就是 程序a里面 实现,

    然后 调用--是等待 插.dll来调用.

    ================================

    这样一来是不是 清晰了呢?

    关键 就是 反向调用时,你不知道 那个你需要的函数的所有者是谁.

    --只有知道使用所有者,你才能找到那个函数. 而插.dll开发时,不知道谁会使用它.

    ========

    你声明含有一个委托的类,就相当于 在该类里面做了一个预留标记,

    对该类实例化就相当于,在预留标记中记录着这个委托实现的地址,

    这样,当该类去调用实现,就找到了事件或委托的地址去执行.

    当然 你可以直接使用地址传递函数,但这样做不安全(回调函数),就类似,一个饭店,让顾客自己去取餐,但是 饭店如果不加限制,顾客自己去后厨做饭,可能出现危险.所以进行约定--委托声明

    ================================

    所以 事件\委托\回调,主要面对的 是 跨类访问,跨程序访问,它是 对象(类) 的 事件,对象(类) 的委托. 至少是个类 才能成为 对象.

    如果是同一个类,一个模块,因为 主人是已知的 所以 不需要  委托,事件.

    =========

  • 相关阅读:
    [HNOI2007]最小矩形覆盖
    [HAOI2008]下落的圆盘
    JSON相关 JSON在线解析 JSON压缩转义工具 JSON着色工具 JSON 在线格式化工具 在线XML/JSON互相转换工具 XML、JSON在线转换
    速度竟差9倍!6款32GB USB3.0优盘横评
    Linux 中用 dd 命令来测试硬盘读写速度
    CrystalDiskMark v7.0.0h中文版
    个人觉得,不单是教育缺失的问题,贫穷才是真像。贫穷分
    就算是3.0的U盘,写入速度10M及以下也是正常的,U盘用很差的闪存颗粒的话就算10Gbps的USB3.1也是很慢的。
    USB历代标准及接口发展
    测试 USB 存储设备读写性能(Mb/s),平均读写速度等
  • 原文地址:https://www.cnblogs.com/MadeInChinese/p/15624787.html
Copyright © 2020-2023  润新知