news 2026/4/23 17:38:58

事件(Event)编程模式标准格式总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
事件(Event)编程模式标准格式总结

一、基本架构模式

1.发布者类(Publisher)格式

csharp

public class 发布者类 { // 1. 声明委托类型 public delegate void 委托名(参数列表); // 2. 声明基于该委托的事件 public event 委托名 事件名; // 3. 触发事件的方法 protected virtual void On事件名(参数) { 事件名?.Invoke(参数); } // 4. 业务逻辑方法 public void 业务方法() { // 业务逻辑... if (触发条件) { On事件名(事件数据); } } }

2.订阅者类(Subscriber)格式

csharp

public class 订阅者类 { public 订阅者类() { // 1. 创建发布者实例 发布者类 实例 = new 发布者类(); // 2. 订阅事件(绑定事件处理程序) 实例.事件名 += 事件处理方法; } // 3. 事件处理方法 private void 事件处理方法(参数列表) { // 处理逻辑 } }

二、核心组件及顺序

发布者端(3步):

  1. 声明委托→ 定义方法签名

  2. 声明事件→ 基于委托声明事件

  3. 触发事件→ 在条件满足时调用事件

订阅者端(2步):

  1. 订阅事件→ 使用+=绑定处理程序

  2. 实现处理→ 编写事件处理方法

三、事件触发标准模式

标准触发方法:

csharp

// 封装事件触发逻辑 protected virtual void On事件名(参数类型 参数) { 事件名?.Invoke(参数); } // 在业务逻辑中调用 public void 业务逻辑方法() { if (触发条件) { On事件名(参数值); } }

四、空值检查模式

两种标准方式:

csharp

// 方式1:空值条件运算符(推荐) 事件名?.Invoke(参数); // 方式2:显式空值检查 if (事件名 != null) { 事件名(参数); }

五、委托与事件位置关系

声明顺序:

  1. 委托必须在类内部或命名空间级别声明

  2. 事件必须基于已声明的委托类型

  3. 事件通常声明为 public 以允许外部订阅

六、事件处理方法签名要求

必须匹配:

  1. 返回类型 → 与委托定义一致

  2. 参数列表 → 与委托定义完全匹配

  3. 可访问性 → 通常为 private,至少能被订阅代码访问

七、订阅操作标准语法

绑定与解绑:

csharp

// 绑定事件处理程序 发布者实例.事件名 += 处理方法; // 解绑事件处理程序 发布者实例.事件名 -= 处理方法;

八、设计原则

1.封装性原则

  • 事件声明为 public

  • 触发方法通常为 protected virtual

  • 事件数据通过参数传递

2.命名规范

  • 事件名:使用动词或动词短语

  • 委托名:通常以 Delegate 结尾

  • 触发方法:以 On 开头

3.安全考虑

  • 始终进行空值检查

  • 使用事件访问器控制订阅

  • 考虑线程安全性

九、标准模板

完整模板结构:

csharp

// 发布者类模板 public class Publisher { public delegate void EventDelegate(DataType data); public event EventDelegate EventName; protected virtual void OnEventName(DataType data) { EventName?.Invoke(data); } public void BusinessMethod() { // 业务逻辑 OnEventName(eventData); } } // 订阅者类模板 public class Subscriber { private Publisher publisher; public Subscriber() { publisher = new Publisher(); publisher.EventName += HandleEvent; } private void HandleEvent(DataType data) { // 事件处理逻辑 } }

十、关键点总结

  1. 委托声明→ 定义通信协议

  2. 事件声明→ 创建通信通道

  3. 事件触发→ 发送通知

  4. 事件订阅→ 注册接收者

  5. 事件处理→ 执行响应逻辑

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:22:22

模组日志体系总体说明!

模组日志体系构建了一套完整的运行信息追踪机制,涵盖日志生成、分级管理、输出控制与存储策略等多个层面。该体系不仅实现对运行过程的可追溯性,还为故障诊断与性能优化提供了坚实的数据基础。 一、本文讨论的边界 本文是对 4G 模组, 以及 4…

作者头像 李华
网站建设 2026/4/23 9:25:50

LuatOS开发指南:系统消息列表的结构与使用技巧!

在基于LuatOS的嵌入式开发中,合理使用系统消息列表能显著提升程序的响应速度与可维护性。消息列表不仅是系统内部通信的通道,也是用户自定义事件传递的重要工具。本文专为新手编写,详细讲解消息列表的数据结构、注册流程与常见使用技巧&#…

作者头像 李华
网站建设 2026/4/23 9:29:07

2026年,我们如何用AI提前看见未来?脉脉「脉向AI」带来新思考

💡 核心观点:在AI时代,真正的安全感不来自固守已有技能,而来自持续预判未来的能力。先一步看见未来的人,将掌握职业发展的主动权。 目录 🌊 引言:站在AI浪潮的临界点上 📊 一组扎心…

作者头像 李华
网站建设 2026/4/23 9:57:35

Python_uniapp-校园商店商城购物小程序

文章目录Python_uniapp-校园商店商城购物小程序的摘要系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!Python_uniapp-校园商店商城购物小程序的摘要 校园商店商城购物小程序基于Python后端和Uniap…

作者头像 李华