c# - 为什么 "new"运算符使用 -= 分离事件处理程序?

标签 c# .net events

为什么我必须使用以下来分离事件?

object.myEvent -= new MyEvent(EventHandler);

运算符的工作让我有些恼火。

谁能解释一下?

更新

我已经知道我不必使用 new 运算符来分离事件,但它仍然是 Visual Studio 2010 中的自动完成建议。我真正的问题是 -= new 如何为分离过程工作。新对象/委托(delegate)如何在 += 端匹配先前创建的对象/委托(delegate)?

最佳答案

您不必使用 new 运算符。自从 C# 2.0 问世以来,您就不必这样做了:

foo.SomeEvent += EventHandler;
foo.SomeEvent -= EventHandler;

这使用方法组转换 从方法组(方法的名称)创建委托(delegate)。这不仅适用于事件:

Action<string> writeToConsole = Console.WriteLine;

编辑:至于如何它是如何工作的:

  • 在事件上使用 -= 最终会调用“删除”访问器,它通常在委托(delegate)上使用 -= ...(至少有效)
  • 在委托(delegate)上使用-=Delegate.Remove 的语法糖
  • Delegate.Remove 使用委托(delegate)相等 - 如果两个委托(delegate)实例具有相同的方法和相同的目标实例(例如方法),则它们相等

请注意,每次执行代码时,使用方法组转换仍会创建委托(delegate)的新实例。

关于c# - 为什么 "new"运算符使用 -= 分离事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8471242/

相关文章:

C# - 在 Select 子句中选择可编程属性

asp.net - asp 服务器错误 ' Could not load file or assembly ' 但程序集肯定存在。

.net - 将 TLS 证书添加到异常为 : The request was aborted: Could not create SSL/TLS secure channel 的 API 请求

java - GWT removeHandler 在第一个事件通知

java - Netty 4 处理 channel 事件

c# - 从用户控制页面访问 MainWindow 的控件。 WPF C#

c# - UWP GridView 图像拉伸(stretch)错误

c# - 分配给委托(delegate)时的返回值和签名歧义——Func<Task> vs Action

c# - 如何在 Windows 窗体中隐藏控件的大小调整句柄?

javascript - 如何在 Internet Explorer 6 中取消注册事件处理程序?