淄博网站建设电话咨询,网站 三合一,wordpress 关闭伪静态,网站建设开发由于技术背景是C起家的#xff0c;所以对于C的概念很清楚#xff0c;遇到C#的EVENT时候#xff0c;总感觉这个概念比较抽象#xff0c;不容易理解#xff0c;但是当使用函数指针和回调函数来理解EVENT的时候#xff0c;这个概念就清晰了。
首先对于EVENT来讲#xff0c…由于技术背景是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来实现。