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

文章通过对比C++的函数指针和回调机制,解释了C#中事件(Event)的概念。在C#中,事件类似于C++的动态库函数指针,用于定义触发逻辑。类ClassHasEvent定义了一个事件和触发函数,而EventListener类作为监听者,通过构造函数订阅事件并提供处理函数。这种理解方式将C#的事件简化为C++的回调函数概念。

由于技术背景是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来实现。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值