【问题标题】:Removing event handlers删除事件处理程序
【发布时间】:2025-12-10 14:40:01
【问题描述】:

这是:

Button.Click -= new EventHandler(Button_Click);

和这个一样:

Button.Click -= Button_Click;

我问是因为在我看来,前者是删除对方法的新引用,而后者是删除方法本身。但是话又说回来,如果程序员没有像那样显式分配它,也许新的 EventHandler 部分隐含在 += 或 -= 重载中?

如果不一样怎么办

Button.Click -= new EventHandler(Button_Click);

VS

Button.Click -= Button_Click;

谢谢。

【问题讨论】:

    标签: c# events delegates


    【解决方案1】:

    是一样的。第二个只是第一个的语法糖,相等比较为委托类型适当地重载:

    具有相同目标、方法和调用列表的相同类型的两个委托被视为相等。

    来源:MSDN, Delegate.Equality Operator

    【讨论】:

      【解决方案2】:

      最终结果是一样的。编译器会自动推断委托的类型,因此不需要 new 运算符来创建它。

      【讨论】: