You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#事件开发中两种EventArgs参数设计方案哪种更优?

结论

方案一的实现合理性远高于方案二,具体原因如下:

  • 符合设计规范:.NET 类库的 EventArgs 设计遵循「上下文最小必要」原则,每个事件对应的参数仅包含当前场景必须的信息,不会冗余传递无关字段,也符合接口隔离原则的设计思想。
  • 规避运行时风险:方案二要求事件订阅方自行判断 A 实例是否为空,一旦订阅方忽略判空逻辑,在 OnPressed 事件中直接访问 a 字段就会触发空引用异常。方案一从语法层面就杜绝了该风险,PressedEventArgs 根本不存在 a 字段,完全没有误用的可能。
  • 可维护性更强:如果后续两个事件需要各自扩展参数(例如 OnPress 要新增触点坐标字段,OnPressed 要新增按压持续时长字段),两个独立的参数类可以互不干扰的修改,不会出现同一个类服务多个场景导致的逻辑臃肿问题。
  • 代码可读性更高:其他开发者查看事件定义时,直接通过参数类型就能明确当前事件的上下文信息,不需要额外文档说明某个字段在特定场景下为空。

方案一示例代码(推荐)

public class PressEventArgs : EventArgs
{
    public A a;
    public B b;
}

public class PressedEventArgs : EventArgs
{
    public B b;
}

方案二(不推荐)

两个事件统一传入 PressEventArgs,未用到的 A 类引用置为 null,存在上述提到的多种风险。

内容的提问来源于stack exchange,提问作者Nefisto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:54:05