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

C#无参数传递需求的事件是否应使用自定义委托而非EventHandler?

关于无额外参数时优先使用EventHandler而非自定义无参委托的原因

首先明确:语法层面使用自定义无参委托定义事件完全合法,没有任何错误,优先推荐EventHandler是.NET生态长期形成的开发约定,有以下实际收益:

  • 统一开发认知,降低协作成本
    整个.NET生态的内置事件全部遵循(object sender, EventArgs e)的标准签名,不管是UI框架的控件事件、还是类库的业务事件,开发人员看到这个签名就可以直接判定这是事件订阅回调,不需要额外阅读注释理解委托用途,团队协作、开源项目开发时可以大幅降低沟通和理解成本。
  • 天然具备良好的扩展性
    当前阶段不需要传递事件参数,不代表后续需求迭代不会增加参数。比如你的计数器需求后续可能需要在触发阈值时返回当前数值、阈值配置等信息,使用EventHandler模式的话,只需要自定义继承自EventArgs的子类,再将事件替换为EventHandler<T>泛型版本即可:
// 新增扩展参数类
public class LimitReachedEventArgs : EventArgs
{
    public int CurrentCount { get; set; }
    public int Threshold { get; set; }
}

// 修改事件定义,原有订阅逻辑如果不需要新参数可以完全不改动
public event EventHandler<LimitReachedEventArgs> OnLimitReached;

如果使用自定义无参委托,后续要加参数就必须修改委托签名,所有订阅了该事件的代码都要同步修改,维护成本极高。

  • 减少冗余代码
    每个自定义事件都单独声明委托会产生大量重复的样板代码,使用.NET内置的EventHandler、EventHandler<T>类型可以省去重复声明委托的步骤,代码更加简洁。
  • 适配生态工具链
    .NET的代码分析器、调试工具、MVVM框架、事件总线组件等生态工具,大多对标准EventHandler模式的事件做了适配优化,使用自定义委托可能无法使用部分配套功能。

补充:如果是个人小型项目,确定需求不会发生变更,也不需要遵循团队开发规范,使用自定义无参委托完全可行,没有任何性能或者语法层面的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:27:03