金蝶K3Cloud五大业务模块数据库表结构速查(HTML离线版)
2026/6/4 2:53:59
csharp
public class 发布者类 { // 1. 声明委托类型 public delegate void 委托名(参数列表); // 2. 声明基于该委托的事件 public event 委托名 事件名; // 3. 触发事件的方法 protected virtual void On事件名(参数) { 事件名?.Invoke(参数); } // 4. 业务逻辑方法 public void 业务方法() { // 业务逻辑... if (触发条件) { On事件名(事件数据); } } }csharp
public class 订阅者类 { public 订阅者类() { // 1. 创建发布者实例 发布者类 实例 = new 发布者类(); // 2. 订阅事件(绑定事件处理程序) 实例.事件名 += 事件处理方法; } // 3. 事件处理方法 private void 事件处理方法(参数列表) { // 处理逻辑 } }声明委托→ 定义方法签名
声明事件→ 基于委托声明事件
触发事件→ 在条件满足时调用事件
订阅事件→ 使用+=绑定处理程序
实现处理→ 编写事件处理方法
csharp
// 封装事件触发逻辑 protected virtual void On事件名(参数类型 参数) { 事件名?.Invoke(参数); } // 在业务逻辑中调用 public void 业务逻辑方法() { if (触发条件) { On事件名(参数值); } }csharp
// 方式1:空值条件运算符(推荐) 事件名?.Invoke(参数); // 方式2:显式空值检查 if (事件名 != null) { 事件名(参数); }委托必须在类内部或命名空间级别声明
事件必须基于已声明的委托类型
事件通常声明为 public 以允许外部订阅
返回类型 → 与委托定义一致
参数列表 → 与委托定义完全匹配
可访问性 → 通常为 private,至少能被订阅代码访问
csharp
// 绑定事件处理程序 发布者实例.事件名 += 处理方法; // 解绑事件处理程序 发布者实例.事件名 -= 处理方法;
事件声明为 public
触发方法通常为 protected virtual
事件数据通过参数传递
事件名:使用动词或动词短语
委托名:通常以 Delegate 结尾
触发方法:以 On 开头
始终进行空值检查
使用事件访问器控制订阅
考虑线程安全性
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) { // 事件处理逻辑 } }委托声明→ 定义通信协议
事件声明→ 创建通信通道
事件触发→ 发送通知
事件订阅→ 注册接收者
事件处理→ 执行响应逻辑