C#编程-使用事件

在这里插入图片描述

在这里插入图片描述

使用事件

事件是一个动作或发生的事情,例如:鼠标点击、按键、鼠标移动或系统产生的通知。应用程序可以在事件发生的时候做出响应。通知的一个示例是中断。事件是对象发生的消息以表示事件的发生。事件是进程内通信的有效方法。它们对对象时有用的,因为它们标识了单个状态改变,可能对对象的客户端有价值。

考虑事件的示例。时钟是一个对象,它显示早上6点的时间,以闹钟的形式产生一个事件。您接受闹铃事件并且做出相应的动作。

下图显示了闹铃事件及对其的处理。
在这里插入图片描述
下图是一个泛化表示,它解释了事件和事件处理。
在这里插入图片描述
在C#中,委托与事件一起使用以实现事件处理。.NET Framework事件模型使用委托来将事件通知与方法绑定,称为事件处理程序。当事件产生的时候,委托调用相关事件处理程序。考虑一个网球视频游戏的场景。游戏玩家一用球拍击球就会生成一个事件。现在根据球拍的位置,委托将为事件选择事件处理程序。如果球拍的位置在玩家的右边,会产生将球发到场地左边的方法。当用户生成击球事件时,会动态确定以特定方法发球。


在这里插入图片描述

将委托用于事件

事件是在类中声明和产生的。可使用委托在相同类或其他类中将它们与事件处理程序相关联。事件是类的一部分,这个类用于发布事件。但是,其他类可以接受这些事件,或者换句话说,可以订阅这些事件。事件使用发布者和订阅者模型。

发布者是一个包含事件和委托定义的对象。事件与委托的关联还在发布者类中指定。发布者的对象调用事件,它被通知给其他对象。

订阅者是要接受事件并为事件提供处理程序的对象。发布者类的委托调用订阅者类的方法。这个在订阅者类中的方法时事件处理程序。发布者和订阅者模型的实现可以由相同类定义。

下图显示了发布者和订阅者对象使用的机制。
在这里插入图片描述
事件的实现包括事件定义、事件订阅和事件通知。

定义事件

在发布者类中事件的定义包括委托的声明和基于委托的事件的声明。

下面的代码定义了一个名为TimeToRise的委托和一个名为RingAlarm的事件,当它被引发时,调用TimeToRise委托:

	public delegate void TimeToRise();
	private event TimeToRise RingAlarm;

订阅事件

发布者类事件需要与它的处理程序关联。事件处理程序方法时使用委托与事件关联的。当发布者对象产生事件的时候,订阅对象与需要调用的方法关联。

考虑名为Student的类,它包含一个名为WakeUp()的方法。要求是应在上午6点调用W

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/321939.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

swing快速入门(四十四)拖动、编辑JTree结点

注释很详细,直接上代码 新增内容(源码细节知识点巨多,建议细看) 1.设置JTree可编辑 2.使用JTree关联的数据模型实现节点的增删改 3.鼠标拖动节点事件设计及处理方法 4.手动刷新视图与自动刷新的方法区别 5.自定位节点视图方法 源码…

【Redis集群】docker实现3主3从扩缩容架构配置案例

一,集群规划及准备工作 架构实现:Redis3主3从 二,搭建命令 第一步,创建6台服务: docker run -d --name redis-node-1 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/data redis:6.0.8 --clust…

单表的查询练习

一、单表查询 素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等 显示所有职工的基本信息。 mysql8.0 [chap03]>select * from worker; 查询所有职工所属部门的部门号,不显示重复的部门号。 mysq…

geemap学习笔记047:边缘检测

前言 边缘检测适用于众多的图像处理任务,除了上一节[[geemap046:线性卷积–低通滤波器和拉普拉斯算子|线性卷积]]中描述的边缘检测核之外,Earth Engine 中还有几种专门的边缘检测算法。其中Canny 边缘检测算法使用四个独立的滤波器来识别对角…

如何通过Burp Suite专业版构建CSRF PoC

Burp Suite是一款强大的渗透测试利器,可以利用它来高效的执行渗透攻击,接下来介绍如何通过Burp Suite Pro来构建CSRF PoC。 如果还没安装burp suite,请参阅【Burp Suite专业版本安装配置及使用指导 】 在Bupr中找到拦截的请求,右…

时序分解 | Matlab实现SMA-CEEMDAN利用黏菌优化算法优化CEEMDAN时间序列信号分解

时序分解 | Matlab实现SMA-CEEMDAN利用黏菌优化算法优化CEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现SMA-CEEMDAN利用黏菌优化算法优化CEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 SMA-CEEMDAN利用黏菌优化算法优化CEEMDAN Matlab语言…

【编码魔法师系列_构建型4】原型模式(Prototype Pattern)

学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通…

还没有自己的博客系统么 使用Docker Compose快速部署Typecho博客系统

1.准备 测试服务器ip:192.168.168.106 docker docker compose 这里不再赘述 不会的直接私信 或者直接翻历史博客 或者直接百度 2.创建目录 mkdir -p /data/Typecho 3.编写docker-compose.yaml文件 vim docker-compose.yaml文件内容如下 version: 3.7services:mysql:im…

九州金榜|15岁初三男孩抑郁休学摆烂打游戏,高压教育要不得!

有一次和朋友一块聚餐,邻座是一位妈妈、和她大概七八岁的儿子,小男孩长得很帅气,没有像同龄人那样调皮捣乱,而是和妈妈很温馨的就餐。 看的出来一家人的素质很高,就餐过程中桌面保持的很整洁,交流声音也不…

SpringCloud Aliba-Nacos-从入门到学废【2】

🥚今日鸡汤🥚 比起不做而后悔,不如做了再后悔。 ——空白《游戏人生》 目录 🧈1.Nacos集群架构说明 🧂2.三种部署模式 🍿3.切换到mysql 1.在nacos-server-2.0.3\nacos\conf里找到nacos-mysql.sql 2.查…

毕业设计:基于python微博舆情分析系统+可视化+Django框架 K-means聚类算法(源码)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

Spring MVC中的一些常用注解

目录 RequestMapping 实现路由映射 限制请求方式 PathVariable 从url中获取变量的值 更改绑定参数的名字 RequestParam 可以传递集合 更改绑定参数的名字 可修改是否为必传参数 RequestBody 获取请求正文的内容 可修改是否为必传参数 RequestPart 可以支持上传…

Vue中的v-model绑定修饰符

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介1. .lazy 修饰符的原理2. .number 修饰符的原理3. .trim 修饰符的原理 ⭐ 写在最后 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏!创建这个专栏的初衷是为了帮助大家更好地应对 Vue.js 技能…

开源项目汇总:机器学习前沿探索 | 开源专题 No.60

facebookresearch/xformers Stars: 6.0k License: NOASSERTION xFormers 是一个加速 Transformer 研究的工具包,主要功能如下: 可自定义构建模块:无需样板代码即可使用的独立/可定制化构建模块。这些组件与领域无关,被视觉、NLP…

从零学Java 多线程(基础)

Java 多线程(基础) 文章目录 Java 多线程(基础)1 多线程1.1 多任务1.2 多线程1.3 普通方法调用和多线程 2 进程和线程2.1 什么是进程(Process)?2.2 什么是线程(Thread)?2.3 进程和线程的区别 3 线程的实现3.1 线程的组成3.2 线程执行特点3.3 线程的创建3.3.1 继承Thread类3.3…

Kubernetes (十二) 存储——Volumes配置管理

一. 卷的概念 官方地址:卷 | Kuberneteshttps://v1-24.docs.kubernetes.io/zh-cn/docs/concepts/storage/volumes/ 二. 卷的类型及使用 …

OpenGauss源码分析-SQL引擎

所讨论文件大多位于src\common\backend\parser文件夹下 总流程 start_xact_command():开始一个事务。pg_parse_query():对查询语句进行词法和语法分析,生成一个或者多个初始的语法分析树。进入foreach (parsetree_item, parsetree_list)循环…

NLP论文阅读记录 - 2021 | WOS 使用分层多尺度抽象建模和动态内存进行抽象文本摘要

文章目录 前言0、论文摘要一、Introduction1.3本文贡献 二.前提三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Abstractive Text Summarization with Hierarchical Multi-scale Abstraction Modeling and Dy…

ecmaScript-定义变量

简言 了解定义变量的三种方式:var、let、const。 正文 var var 语句 用于声明一个函数范围或全局范围的变量,并可将其初始化为一个值(可选)。 特点: 无论在何处声明变量,都会在执行任何代码之前进行变…

【Spring 篇】深入解析SpringMVC的组件魅力

SpringMVC,这个名字在Java Web开发者的耳边仿佛是一首动听的旋律,携着轻盈的氛围,带给我们一种愉悦的编程体验。但是,当我们深入探寻这个框架时,它的魅力远不止表面的简单,它由许多组件构成,每个…