当前位置: 首页 > news >正文

从C++的角度理解C#的Event

由于技术背景是C++起家的,所以对于C++的概念很清楚,遇到C#的EVENT时候,总感觉这个概念比较抽象,不容易理解,但是当使用函数指针和回调函数来理解EVENT的时候,这个概念就清晰了。

首先对于EVENT来讲,需要定义一个类,来定义Event和触发逻辑,这就是C++的动态库中定义一个函数指针,然后再定义这个指针的变量,这个在C#中可以说是一模一样的概念。

 class ClassHasEvent
    {
        public delegate void TestEvent(object sender, EventArgs e);
        public event TestEvent Event;

        //触发Event的函数
        protected void TriggerEvent(EventArgs e)
        {
            if (Event != null)
                Event(this, e);
        }
    }

如果从回调函数来理解,就是定义被调用模块,在其中定义相关的函数指针的变量,同时在模块内部根据需要的逻辑出发对应的通知。

随后需要在调用模块中定义处理这个通知的函数,也就是C#中处理Event的类。在这个类的构造函数中需要传入对应的被调用模块的类。如下是倾听者对应的类。

class EventListener
    {
        TestClassHasEvent _inject;

        public EventListener(TestClassHasEvent inject)
        {

            _inject = inject;

            _inject.Event += new TestClassHasEvent.TestEvent(_inject_Handler);
        }

        public void _inject_Handler(object sender, EventArgs e)
        {

        }

    }

有了如上的对应关系以后,理解C#的Event概念就很简单了,就是C++中的回调函数的概念,在C#中使用Event来实现。

http://www.lryc.cn/news/18537.html

相关文章:

  • 商城进货记录交易-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)
  • 【正点原子FPGA连载】第十七章双核AMP实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
  • 内存管理框架---页(一)
  • 华为OD机试真题Python实现【流水线】真题+解题思路+代码(20222023)
  • 「JVM 编译优化」Graal 编译器
  • 蓝牙标签操作指南
  • 嵌入式 Linux Shell编程
  • Web前端学习:一
  • SpringBoot集成Redis实现分布式会话
  • 2023年关于身份安全的4 个预测
  • Linux期末考试应急
  • mars3d对geojson图层分属性设置样式
  • 三、锁相关知识
  • C语言数据类型
  • 华为OD机试真题Python实现【水仙花数】真题+解题思路+代码(20222023)
  • 【华为OD机试模拟题】用 C++ 实现 - 非严格递增连续数字序列(2023.Q1)
  • RN面试题
  • 【数据存储】浮点型在内存中的存储
  • Servlet笔记(8):异常处理
  • stm32f407探索者开发板(二十一)——窗口看门狗
  • C++ 模板
  • C++中的友元及运算符重载
  • 五、运行时数据区内部结构、JVM中的线程
  • Codeforces Round #848 (Div. 2)A-C
  • 机器学习笔记之近似推断(一)从深度学习角度认识推断
  • 指针的进阶
  • 一元二次方程方程的类
  • Ask林曦|来回答,30个你关心的日常问题(二)
  • 哪款电容笔适合开学季?电容笔和Apple Pencil的区别
  • Qt之Qprocess