首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#中的事件

前言

在我们日常的软件开发工作中,很容易用到事件机制,简单举例就好比民国时期订阅报纸机制一样,当订阅者在报社订阅该报社发行的报纸一样,只需要告诉报社快递到哪里即可,每次当报社发报时,订阅人都会在同一时间地点收到订阅的报纸,不会出现遗漏等情况。

这也就是编程过程中事件所要解决问题。

那么我们一起来学习下在C#语言下,事件到底该如何实现?

什么是事件

以前在设计模式学习的过程中,了解到了订阅者/发布者模式,它解决的是当一个特定事件程序发生时,程序的其它部分得到该事件已经发生的通知。

在这种模式中,发布者定义了一系列程序的其他部分可能感兴趣的事件,其他类可以进行注册,以便在事件发生时发布者可以通知它们。这些订阅者通过向发布者提供一个方法来注册以获得通知,当事件发生时,发布者触发事件,然后执行订阅者提交的所有事件。订阅者就可以接收到消息通知。

事件有很多重要事项

发布者

发布某个事件的类或结构,其他类可以在该事件发生时得到通知。

订阅者

注册并在事件发生时得到通知的类或结构

事件处理程序

由订阅者注册到事件的方法,在发布者触发事件时执行。可定义在事件所在类,也可定义在不同的类中。

触发事件

调用(invoke)或触发(fire)事件的术语。当事件被触发时,所有注册到它的方法都将会被调用。

事件就像是专门用于某种特殊用途的简单委托。事件包含一个私有的委托。

事件的用法

这里需要特别强调一点,事件不是类型,它和方法和属性一样,事件是类或结构的成员。那么就必须注意下面两点:

事件不能声明在可执行的代码中

它必须声明在类或结构中,和其他成员一样

事件成员被隐式自动初始化为null

BCL声明了一个叫做EventHandler的委托,专门用于系统事件。

下面列举一个比较简单的例子,就以报社和订阅者阿辉为例,当报社开始发报时,阿辉就会收到报纸。

报社(发布者)

阿辉(订阅者)

运行后结果如下:

寄语

人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。

原创不易,给个关注。

感谢您的阅读,如果对你有帮助,麻烦点赞、转发  谢谢。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20220204A082WF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券