首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
C#事件
返回列表
发新帖
C#事件
[复制链接]
发表于 2024-5-19 22:51:08
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
C#事件
概述
定义
类或对象可以通过事件向其他类或对象通知发生的相关事情。
发送(或引发)事件的类称为“
发布
者”,接收(或处置惩罚)事件的类称为“订阅者”。
事件是一种特殊的多播委托,是委托实例变量,
事件只能在类的内部定义,只能从声明它的类中举行调用
。 外部只能订阅和取消订阅事件。
事件的组成部分
C#事件由以下三个部分组成:
事件
发布
者:定义事件的对象。事件
发布
者负责触发事件并通知订阅者。
事件参数:事件发生时需要通报的信息。事件参数可以是任何类型的对象。如果事件不需要通报参数,则可以使用 EventArgs 类。
事件订阅者:订阅事件的对象。事件订阅者会在事件发生时实行相应的操纵。
基本语法
【
发布者
】事件声明
public event 委托类型 事件名;
public event DelBtnClick OnBtnClick;
复制
代码
【
订阅者
】事件订阅 +=,取消订阅-=
var page = new Page();
page.OnBtnClick +=Page_OnBtnClick;
private static void Page_OnBtnClick(ClickEventArgs eventArgs)
{
MessageBox.Show($"客户端,按钮点击后回调 eventArgs:{eventArgs.ClickCount}");
}
复制
代码
【
发布者
】事件触发。其中new ClickEventArgs(1) 为回传给订阅者的自定义事件参数
OnBtnClick?.Invoke(new ClickEventArgs(1));//触发事件时 把事件参数传递给订阅者。
复制
代码
【
发布者
】自定义事件参数。 继续 EventArgs
public class ClickEventArgs : EventArgs
{
public ClickEventArgs(int clickCount)
{
ClickCount = clickCount;
}
public int ClickCount { get; private set; }
}
复制代码
常见用法/应用场景
事件的优点
松耦合:事件发布者和订阅者之间是松耦合的,这意味着它们不需要知道相互的内部实现细节。这使得代码更易于维护和扩展。
可扩展性:事件可以支持多个订阅者,这使得代码易于扩展以支持新的
功能
。
异步性:事件是异步的,这意味着事件订阅者可以在事件发生时实行任何操纵,而不会阻塞事件发布者。
事件的应用示例
事件的缺点
性能
开销
性能
: 事件会带来一些
性能
开销,由于需要维护事件处置惩罚步伐列表,因此应尽量避免频繁触发事件。
复杂性: 事件可能会使代码更加复杂,尤其是当涉及到多个事件和处置惩罚步伐时
事件
安全
:事件处置惩罚步伐通常在不同的线程上实行,因此需要考虑线程
安全
题目。
事件滥用:避免过度使用事件,否则会导致代码难以维护。
常见的应用场景
GUI编程:事件通常用于响应用户交互,比方按钮单击、文本框输入等。
网络编程:事件可用于通知应用步伐有关网络运动的事件,比方连接创建、数据接收等。
系统编程:事件可用于通知应用步伐有关系统运动的事件,比方进程启动、设备连接等。
竣事语言
C# 事件是一种强大的机制,可用于实现松耦合、可扩展和可重用的代码。但是,事件也可能会带来一些性能开销和复杂性。
引用
博文示例代码 https://github.com/chi8708/DotNetNote/blob/master/Note.Basic/05event.cs
参考文献
使用事件- C# 编程指南 - Microsoft Learn:
https://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/events/
C# 中的委托和事件(详解):
回复
使用道具
举报
返回列表
浏览过的版块
DevOps与敏捷开发
分布式数据库
云原生
SAAS
SQL-Server
物联网
数据仓库与分析
人工智能
Oracle
移动端开发
鼠扑
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表