为什么我必须使用以下来分离事件?
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/