事件(Event)编程模式标准格式总结
2026/6/4 2:54:51 网站建设 项目流程

一、基本架构模式

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. 事件处理→ 执行响应逻辑

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询