news 2026/4/15 20:29:18

事件(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/15 20:24:58

特性与反射总结

一、概念对比特性(Attributes)是什么:给代码元素贴的"标签"或"注解" 作用:为代码添加额外信息(元数据) 时机:编译时和运行时都可以读取反射(Reflection&#xf…

作者头像 李华
网站建设 2026/4/9 7:28:54

别光说不练,10分钟带你从零搭建RustFS集群

看了那么多RustFS的文章,是不是已经手痒了,想亲自上手试试它到底有多猛? 别急,今天我就不带大家云评测了,直接上干货。咱们从最简单的Docker单机部署开始,一步步搭起一个生产可用的RustFS集群。跟着我的节…

作者头像 李华
网站建设 2026/4/13 1:38:58

Pixel Streaming 实战配置

目录 Pixel Streaming 配置分辨率 Pixel Streaming 配置分辨率 (1) 命令行参数) 启动 UE5 的 Pixel Streaming 服务器时,可以在命令行里加: PixelStreamingURLhttp://127.0.0.1:8888 ResX1920 ResY1080 或者在 Windows 打包的 .exe 后面:…

作者头像 李华