前言
在我们日常的软件开发工作中,很容易用到事件机制,简单举例就好比民国时期订阅报纸机制一样,当订阅者在报社订阅该报社发行的报纸一样,只需要告诉报社快递到哪里即可,每次当报社发报时,订阅人都会在同一时间地点收到订阅的报纸,不会出现遗漏等情况。
这也就是编程过程中事件所要解决问题。
那么我们一起来学习下在C#语言下,事件到底该如何实现?
什么是事件
以前在设计模式学习的过程中,了解到了订阅者/发布者模式,它解决的是当一个特定事件程序发生时,程序的其它部分得到该事件已经发生的通知。
在这种模式中,发布者定义了一系列程序的其他部分可能感兴趣的事件,其他类可以进行注册,以便在事件发生时发布者可以通知它们。这些订阅者通过向发布者提供一个方法来注册以获得通知,当事件发生时,发布者触发事件,然后执行订阅者提交的所有事件。订阅者就可以接收到消息通知。
事件有很多重要事项
发布者
发布某个事件的类或结构,其他类可以在该事件发生时得到通知。
订阅者
注册并在事件发生时得到通知的类或结构
事件处理程序
由订阅者注册到事件的方法,在发布者触发事件时执行。可定义在事件所在类,也可定义在不同的类中。
触发事件
调用(invoke)或触发(fire)事件的术语。当事件被触发时,所有注册到它的方法都将会被调用。
事件就像是专门用于某种特殊用途的简单委托。事件包含一个私有的委托。
事件的用法
这里需要特别强调一点,事件不是类型,它和方法和属性一样,事件是类或结构的成员。那么就必须注意下面两点:
事件不能声明在可执行的代码中
它必须声明在类或结构中,和其他成员一样
事件成员被隐式自动初始化为null
BCL声明了一个叫做EventHandler的委托,专门用于系统事件。
下面列举一个比较简单的例子,就以报社和订阅者阿辉为例,当报社开始发报时,阿辉就会收到报纸。
报社(发布者)
阿辉(订阅者)
运行后结果如下:
寄语
人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。
原创不易,给个关注。
感谢您的阅读,如果对你有帮助,麻烦点赞、转发 谢谢。
领取专属 10元无门槛券
私享最新 技术干货