使用事件机制的好处例子说明

不使用事件机制

class Button
{public void OnClick(){// 调用文本框的方法显示消息TextBox.ShowMessage("按钮被点击了!");}
}class TextBox
{public static void ShowMessage(string message){Console.WriteLine(message);}
}

如果你想要在按钮被点击时执行其他操作,比如弹出一个对话框,那么你就需要修改按钮的代码

class Button
{public void OnClick(){// 调用文本框的方法显示消息TextBox.ShowMessage("按钮被点击了!");// 新增功能,在按钮被点击时弹出一个对话框DialogBox.ShowDialog("您点击了按钮!");}
}class TextBox
{public static void ShowMessage(string message){Console.WriteLine(message);}
}

这样做的问题是,按钮和文本框之间的耦合度变高了,按钮需要直接调用文本框的方法来显示消息,并且还需要负责弹出对话框。如果你想要在其他地方也执行弹出对话框的操作,那么也需要在其他地方重复这些代码,导致代码冗余和维护成本高。

如果你使用事件机制,你可以将弹出对话框的操作封装成一个事件处理程序,然后在需要执行这个操作的地方订阅该事件即可,不需要修改按钮的代码: 

class Button
{// 定义一个事件,表示按钮被点击的事件public event EventHandler Click;public void OnClick(){// 触发按钮被点击的事件Click?.Invoke(this, EventArgs.Empty);}
}class TextBox
{public void ShowMessage(object sender, EventArgs e){Console.WriteLine("按钮被点击了!");}
}class DialogBox
{public static void ShowDialog(object sender, EventArgs e){Console.WriteLine("您点击了按钮!");}
}class Program
{static void Main(string[] args){Button button = new Button();TextBox textBox = new TextBox();DialogBox dialogBox = new DialogBox();// 将文本框的 ShowMessage 方法和对话框的 ShowDialog 方法注册为按钮被点击时的事件处理程序button.Click += textBox.ShowMessage;button.Click += dialogBox.ShowDialog;// 模拟按钮点击button.OnClick();Console.ReadLine();}
}

这样做的好处是,不需要修改按钮的代码,只需要在需要让按钮执行其他操作时,将对应的事件处理程序注册为按钮的事件处理程序即可。这就体现了事件机制的解耦和可扩展性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AR眼镜定制_AR智能硬件方案|显示方案|光学方案

AR眼镜的硬件方案定制是根据客户需求和功能来设计的。从芯片平台选型、主板尺寸大小、内存、电池容量,到实现各项功能的传感器、显示光机模组、摄像头、接口、按键、充电等,再到整机的结构、散热设计,以及双目AR眼镜、单目智能眼镜、全息头盔…

【集合】Vector与CopyOnWriteArrayList

前言: 此篇博客着重于:在多线程并发执行读、写操作的场景下,Vector集合、CopyOnWriteArrayList集合是否能保证线程安全?它们是通过什么方式保证线程安全的? Vector: (1)add(E e)方法…

Linux系统下修改环境变量及生效方法

1.修改环境变量 (1)打开终端,输入以下命令后回车: vim ~/.cshrc (2)将所需的环境变量添加进去,按“Esc”退出,再按shiftZZ,使其保存 2.执行source ~/.cshrc使其生效即…

Text to image论文精读 TISE (Text-to-Image Synthesis Evaluation):用于文本到图像合成的评估度量工具包

TISE (Text-to-Image Synthesis Evaluation)是一款用于评估文本生成图像的Python评估工具箱。文章由Tan M. Dinh, Rang Nguyen, and Binh-Son Hua等人发表。 其以统一的方式促进、倡导公平的评估度量,并为未来的文本到图像综合研究提供可重复的结果。 文章链接&am…

centos7.9中离线安装nginx开启ssl,arm架构

一、首先需要去国内相关镜像库下载相关依赖rpm: http://mirrors.bfsu.edu.cn/centos-altarch/7.9.2009/os/aarch64/ http://mirror.nju.edu.cn/centos-altarch/7.9.2009/os/aarch64/ http://mirrors.tuna.tsinghua.edu.cn/centos-altarch/7.9.2009/os/aarch64/ htt…

电子企业数字工厂管理系统有哪些实施难点

随着科技的快速发展,数字化转型已经成为企业提升竞争力、优化生产流程的必经之路。在电子企业中,数字工厂管理系统的实施尤为关键,它能够助力企业实现高效、精准的生产管理。然而,在实际操作过程中,实施数字工厂管理系…

linux ARM64 异常

linux 的系统调用是通过指令陷入不同异常级别实现的。arm64 架构的 cpu 的异常级别结构如下: 在上图中,用户层运行在 EL0 也就是异常级别 0,Linux 内核运行在 EL1 也就是异常级别 1,安全可信操 作系统运行在异常级别 2&#xff1a…

(四) ClickHouse 中使用 `MaterializedMySQL` 引擎单独同步 MySQL 数据库中的特定表(例如 `aaa` 和 `bbb`)

要在 ClickHouse 中使用 MaterializedMySQL 引擎单独同步 MySQL 数据库中的特定表(例如 aaa 和 bbb),您可以使用 TABLE OVERRIDE 功能。这个功能允许您指定要同步的特定表,同时忽略其他表。以下是步骤说明: 1. 启用 M…

微信小程序---分包

概念:分包就是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。 分包的优点:可以优化小程序首次启动的下载时间,在多团队共同开发时可以更好的解耦…

[2023-年度总结]凡是过往,皆为序章

原创/朱季谦 2023年12月初,傍晚,在深圳的小南山看了一场落日。 那晚我们坐在山顶的草地上,拍下了这张照片——仿佛在秋天的枝头上,结出一颗红透的夕阳。 这一天很快就会随着夜幕的降临,化作记忆的碎片,然…

calc()

需要注意的是,运算符前后都需要保留一个空格,例如:width: calc(100% - 10px);任何长度值都可以使用calc()函数进行计算;calc()函数支持 "", "-", "*", "/" 运算;c…

ComfyUI如何中文汉化

comfyui中文地址如下: https://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Translationhttps://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Translation如何安装? 1. git安装 进入项目目录下的custom_nodes目录下,然后进入控制台,运…

Geotrust与QuickSSL证书

随着互联网的发展,SSL证书已经成为了保护网站数据传输安全的重要手段。然而,一些SSL证书申请流程繁琐,需要提供各种证明文件和等待审核,这对于许多小型企业或个人站长来说是一个很大的困扰。QuickSSL是Geotrust旗下的子品牌之一&a…

飞天使-k8s知识点7-kubernetes升级

文章目录 验证新版本有没有问题需要安装的版本微微 1.20.6.0kubeadm upgrade plan 验证新版本有没有问题 查看可用版本的包 现有的状态 查看版本 yum list kubeadm --showduplicates |grep 1.20 yum list kubelet --showduplicates |grep 1.20 yum list kubectl --showduplic…

什么是CPA、CPS、CPM、CPT、CPC

网络营销中的几个常见基本术语:CPA、CPS、CPM、CPT、CPC 他们的英文全称与基本含义分别是: CPA(Cost Per Action) 每行动成本。CPA是一种按广告投放实际效果计价方式的广告,即按回应的有效问卷或注册来计费,而不限广告投放量。电…

P1016 [NOIP1999 提高组] 旅行家的预算

网址如下: P1016 [NOIP1999 提高组] 旅行家的预算 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 考前练练手 一道 普及/提高 难度的题 秒了 想到以前高中的时候被普及难度的题按在地上摩擦,现在能秒洛谷普及难度的题,有点泪目 代码如下…

记账导出excel表格,用表格导出账目数据

我们每天都在跟金钱打交道,记账则是更好地管理自己财务的一种方式,传统记账不仅繁琐,还容易出错。那么,有没有简单、高效的记账方式呢?答案是肯定的!今天,我们就向大家推荐一款全新的记账软件——晨曦记账本…

电子公章软件,怎么实现批量自动盖章?

在商务合作中,企业电子公章软件在提高办公效率、确保文件的法律效力方面发挥着关键作用。微签是国内电子公章软件领域的拓荒者之一,有19年的电子签研发应用经验,专注于审批场景中的安全签章。 今天,微签给大家带来了详细的“批量…

【Kafka每日一问】kafka如何扩容broker,对于新增加的broker什么时候会将分区复制到新的broker上?

在Kafka中,扩容Broker(消息存储节点)是一种常见的操作,用以提升集群的存储容量和提高整体吞吐量。当你需要扩容Kafka集群时,通常会添加新的Broker节点。以下是扩容Kafka Broker的基本步骤: 1. 准备新Broke…

【电商】AI模特 高清放大

目录 实战一:模特人偶 实战二:3D OPEN POSE 生成 模特 高清放大(可开启ADetailer) 实战三:半身模特 随机生成 高清放大(可开启ADetailer) 实战四:人偶生成模特图 实战一&#x…