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
相关产品推荐
相关产品推荐

