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

C#(事件)2

一、事件的使用步骤

定义委托(如果需要):

如果没有合适的预定义委托,就需要定义一个委托来匹配事件处理程序的签名。例如,public delegate void MyEventHandler(int value);定义了一个名为MyEventHandler的委托,它表示一个返回值为void且带有一个int类型参数的方法。

定义事件:

在发布者类中,使用委托定义事件。例如,public event MyEventHandler MyEvent;定义了一个名为MyEvent的事件,其类型是MyEventHandler委托。

订阅事件:

在订阅者类中,通过+=操作符来订阅事件。例如,假设publisher是发布者对象,subscriber是订阅者对象,并且subscriber有一个名为HandleMyEvent的方法(其签名符合MyEventHandler委托),则可以使用publisher.MyEvent += subscriber.HandleMyEvent;来订阅事件。

触发事件:

当发布者中的某个条件满足时通过调用事件来触发它。通常使用MyEvent?.Invoke(sender, args);的形式,其中sender是触发事件的对象(通常是发布者本身),args是事件参数,?操作符是为了防止事件为空(没有订阅者)时引发异常。

二、事件参数(EventArgs)

EventArgs是一个基类,用于传递事件相关的信息。它可以被继承来创建自定义的事件参数类。例如,MouseEventArgs继承自EventArgs,用于在鼠标相关的事件(如MouseClickMouseMove等)中传递鼠标的位置、按钮状态等详细信息。

标准的EventHandler委托的第二个参数类型是EventArgs。当定义自定义事件时,如果不需要传递额外的信息,可以直接使用EventArgs.Empty作为参数。

三、事件的优势

解耦对象之前的关系:

事件使得发布者和订阅者之间的耦合度降低。发布者不需要知道哪些对象会订阅它的事件,订阅者也不需要知道事件是如何被触发的细节。它们只需要遵循事件的契约(委托的签名)。

提高代码的可维护性和可扩展性:

可以方便地添加或移除订阅者,对事件处理逻辑进行修改,而不会影响到其他部分的代码。例如,在一个大型的企业级应用程序中,不同的模块可以通过事件来进行通信,当需要添加新的功能时,只需要订阅相应的事件并实现处理逻辑即可。

C#练习25


http://www.kler.cn/a/451386.html

相关文章:

  • K8s 无头服务(Headless Service)
  • SDMTSP:粒子群优化算法PSO求解单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)
  • 渗透Vulnhub-DC-9靶机
  • log4j2漏洞复现(CVE-2021-44228)
  • 本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——13使用Resnet-Bin
  • MVC 发布
  • 第79期 | GPTSecurity周报
  • 《智启新材:人工智能重塑分子结构设计蓝图》
  • Krita安装krita-ai-diffusion工具搭建comfyui报错没有ComfyUI_IPAdapter_plus解决办法
  • [Vim][常用操作整理]详细讲解
  • 音视频学习(二十七):SRT协议
  • Excel 列名称转换问题 Swift 解答
  • LeetCode 343.整数拆分
  • #渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍11基于XML的SQL注入(XML-Based SQL Injection)
  • 考前96天 学习巩固 计算机、数学、英语
  • leetcode 3132. 找出与数组相加的整数 II 中等
  • MySQL追梦旅途之慢查询分析工具mysqldumpslow和pt-query-digest
  • Maximum Crossings (Hard Version)最大交叉次数(困难版本)
  • ROS1入门教程5:简单行为处理
  • 【es6复习笔记】生成器(11)
  • C++-------回溯最大最小算法
  • Word表格批量添加题注代码
  • 反汇编一个简单的C程序
  • MySQL的架构设计和设计模式
  • 面试记录24年新
  • 乐乐音乐Flutter版