jph*_*ann 18 c# events event-handling
在MSDN 事件教程中,通过示例演示了事件:
// Add "ListChanged" to the Changed event on "List":
List.Changed += new ChangedEventHandler(ListChanged);
...
// Detach the event and delete the list:
List.Changed -= new ChangedEventHandler(ListChanged);
Run Code Online (Sandbox Code Playgroud)
我在哪里一直提到代表.例:
ChangedEventHandler myChangedEvent = new ChangedEventHandler(ListChanged);
List.Changed += myChangedEvent;
...
List.Changed -= myChangedEvent;
Run Code Online (Sandbox Code Playgroud)
当我查看MSDN示例代码时," - = new"对我来说是错误的.为什么这个List会引用我刚刚创建的事件处理程序?
显然我必须以错误的方式思考问题?我是否可以获得指向如何 - =工作的技术解释的指针,看看 - =似乎没有使用它.
Han*_*ant 20
是的,这是令人困惑的语法.必须先创建委托对象,然后才能从事件中删除处理程序.这也是C#支持这种语法的原因:
List.Changed -= ListChanged;
Run Code Online (Sandbox Code Playgroud)
这看起来更合乎逻辑.然而,编译器仍然生成完全相同的代码.在引擎盖下,MulticastDelegate.RemoveImpl()方法迭代调用列表并从目标和方法属性匹配的列表中删除委托对象.