关于事件的理解

2023-05-16

以前的时候,事件这个东西虽然说是经常用,但是没有真正意义上去理解它,为什么要用事件,事件有什么好处,明明可以直接用方法实现为什么还要去用事件,说到底,事件就是触发一个场景之后,实现的一些内容。

用事件的目的,它是为了降低耦合,扩展性强,这个东西如果是在业务简单项目里面,它是比较难看出来优点的,如果复杂了,那它的优势就很明显,很容易看出来。

 /// <summary>
        /// delegate
        /// </summary>
        /// <returns></returns>
        public delegate void ThiefBreakVaseEventHanler();

        /// <summary>
        /// event
        /// </summary>
        public static event ThiefBreakVaseEventHanler ThiefBreakVase;
        static void Main(string[] args)
        {
            Console.WriteLine("小偷打碎了花瓶,触发了事件");
            Console.WriteLine("猫狗听到了声音,于是");
            //Subscription events
            ThiefBreakVase += Cat_ThiefBreakVase;
            ThiefBreakVase += Dog_ThiefBreakVase;
            Cause();
        }

        /// <summary>
        /// Trigger events
        /// </summary>
        private static void Cause()
        {
            //start event
            ThiefBreakVase?.Invoke();
        }

        private static void Cat_ThiefBreakVase()
        {
            new Cat().call();
        }

        private static void Dog_ThiefBreakVase()
        {
            new Dog().call();
        }
    }

    public class Cat : IAnimal
    {
        public void call()
        {
            Console.WriteLine("喵喵喵!");
        }
    }

    public class Dog : IAnimal
    {
        public void call()
        {
            Console.WriteLine("汪汪汪!");
        }
    }

 

具体的好处从这个事件就可以看出来,现在可以在事件中添加想要的方法,那么这个方法是在触发的时候调用的,可以在预先写好的代码中,补充触发之后应该做的事情。

不用去修改系统源码,就可以实现对这个事件的功能的补充,这就是解耦。

如果行为是固定的,就是想在事件触发之后去执行固定方法,不需要扩展,那么通过自定义事件来实现其实没太大必要,除非考虑到觉得你需要给其他人留条路,提供给别人来使用,那么这个解耦就是有用的。

自定义事件适合那些需要开放出来的事件,例如系统将click等事件触发时机开发给我们,我们就可以根据我们的需要,在这些事件中做我们想做的事情。而不需要预先告诉系统,我应该在click事件中做什么事情。

当然解耦自然会增加性能消耗,所以使用的时候应该考虑是不是一个需要开放事件,如果是就有解耦,如果不是,就不需要。

代码是最低级的东西,要去在思维上理解,知道什么时候使用,为什么这么用,好处,优势,才能更好的去运用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于事件的理解 的相关文章

随机推荐

  • STM32烧写一次程序后,再次烧写识别不到单片机

    STM32cubeMX生成的程序 xff0c 编译后烧录一次后 xff0c 在次烧录会发现识别不到单片机了 xff0c 解决方案 xff1a 在STM32cubeMX工程中的SYS中 xff0c Debug中选择Serial Wire 使能
  • 百度超级链学院开课啦!第一讲教你《如何快速建链》

    百度超级链Xuperchain开源之后 xff0c 我们感受到了开发者伙伴们的热情关注 xff0c 其中有不少朋友提到希望进一步了解百度超级链网络的搭建方法 今天 xff0c 百度超级链小X姐姐和百度资深研发工程师静姐姐 xff0c 为大家
  • centos7操作/关闭防火墙

    前言 xff1a 测试环境部署不同端口的服务 xff0c 需要频繁使用防火墙放行端口 xff0c 比较麻烦 xff0c 所以需要彻底关闭防火墙 xff0c 整理了以下命令 xff0c 提供使用 systemctl status firewa
  • [kubernates]kube-flannel-ds 一直 CrashLoopBackOff

    使用 Kubeadm 安装 K8s 集群 xff0c 在安装 flannel 网络插件后 xff0c 发现 kube flannel ds 一直处于 CrashLoopBackOff 状态 xff1a span class token pu
  • Bottom-up And Top-down

    Bottom up 自下而上的处理可以理解为 xff1a 将感应器结果作为输入 xff0c 也就是激励 因此自下而上可以被描述为是数据驱动的 例如 xff0c 在一个人的花园正中有一朵花儿 xff0c 这个花儿的视觉和所有的激励信息都从视网
  • pyqt5在statusbar中不断的刷新显示不同的信息

    在PYQT5中不断的显示新的信息 需求 xff1a 需要在statusbar 上不断的显示新的测试数据 现在在测试例子中 xff0c 数据由numpy生成 总结如下 xff1a span class token comment coding
  • 如何在VS下调试自己写的dll

    一 准备资料 1 qt写的应用程序 test pro xff0c 编译程序可执行文件test exe 2 qt写的动态库程序 dll pro 二 调试步骤 1 用vs打开dll pro 2 dll工程右键属性如下图所示修改 3 编译运行dl
  • 通俗理解网络架构搜索(NAS)

    什么是NAS 我们假设模型必须是一个三层的全连接神经网络 xff08 一个输入层 一个隐层 一个输出层 xff09 xff0c 隐层可以有不同的激活函数和节点个数 xff0c 假设激活函数必须是relu或sigmoid中的一种 xff0c
  • GDB 的进入和退出

    进入和退出GDB 本节讨论如何启动和退出GDB 主要包括 xff1a 输入 39 gdb 进入GDB调试器输入quit或者按下Ctrl d退出调用GDB xff1a 如何启动GDB退出GDB xff1a 如何退出GDBShell脚本命令 x
  • OpenGL 矩阵变换GLM库的使用

    GLM和MVP矩阵操作速记 连续工作15小时 xff0c 累了 xff0c 睡觉 include glm glm hpp include glm gtc matrix transform hpp 若未特别说明 xff0c 以下示例均假设矩阵
  • 通俗理解RNN

    全连接神经网络和卷积神经网络他们都只能单独的取处理一个个的输入 xff0c 前一个输入和后一个输入是完全没有关系的 但是 xff0c 某些任务需要能够更好的处理序列的信息 xff0c 即前面的输入和后面的输入是有关系的 比如 xff0c 当
  • 基于深度学习的视频检测(一)

    一 简介 图像目标检测任务在过去几年深度学习的发展背景下取得了巨大的进展 xff0c 检测性能得到明显提升 但在视频监控 车辆辅助驾驶等领域 xff0c 基于视频的目标检测有着更为广泛的需求 由于视频中存在运动模糊 xff0c 遮挡 xff
  • 硬核解读 | 一篇文章看透百度XuperChain系统架构

    本期 百度超级链学院 邀请来资深研发工程师 xff0c 为各位开发者带来超硬核解读 xff0c 揭秘百度XuperChain系统架构到底是怎样的 xff01 背景 百度XuperChain在2019年5月底正式宣布开源 在开源后很快获得了开
  • 基于深度学习的视频检测(三) 目标跟踪

    搭建环境 Ubuntu16 04 43 CUDA9 43 cudnn7 43 python3 5 43 源码编译Tensorflow1 4 43 opencv3 3 基于 darkflow yolo v2 和 sort deep sort
  • 基于深度学习的视频检测(六) 行人计数,监控视频人员管理

    搭建 darkflow与 sort deep sort 环境 修改 darkflow net yolov2 predict py span class hljs keyword import span numpy span class hl
  • C++面试 设计模式之单例模式(C++11)

    单例模式 确保一个类只有一个实例 xff0c 并提供了一个全局访问点 单例模式 xff0c 可以说设计模式中最常应用的一种模式了 xff0c 据说也是面试官最喜欢的题目 但是如果没有学过设计模式的人 xff0c 可能不会想到要去应用单例模式
  • 异常检测 Deep One-Class Classification

    ICML 2018 参考 https www zhihu com question 22365729 answer 115048306 https zhuanlan zhihu com p 32784067 https blog csdn
  • TensorFlow和Keras解决数据量过大内存溢出

    将上万张图片的路径一次性读到内存中 xff0c 自己实现一个分批读取函数 xff0c 在该函数中根据自己的内存情况设置读取图片 xff0c 只把这一批图片读入内存中 xff0c 然后交给模型 xff0c 模型再对这一批图片进行分批训练 xf
  • LQ-Nets: Learned Quantization for Highly Accurate and Compact Deep Neural Networks

    ECCV 2018 ABSTRACT 虽然权重和激活值的量化是深度神经网络 xff08 DNN xff09 压缩的有效方法 xff0c 并且具有很大的潜力来提高利用位操作的推理速度 xff0c 但是在量化模型和full precision模
  • 关于事件的理解

    以前的时候 xff0c 事件这个东西虽然说是经常用 xff0c 但是没有真正意义上去理解它 xff0c 为什么要用事件 xff0c 事件有什么好处 xff0c 明明可以直接用方法实现为什么还要去用事件 xff0c 说到底 xff0c 事件就