|
|
1
63
How to Subscribe to and Unsubscribe from Events 特别注意:
而且:
|
|
|
2
20
更新:
在C#7.0中,我们支持
local functions
所以
|
|
|
3
6
如果需要取消订阅事件处理程序,则需要对具体委托有明确的引用。看着
对于匿名委托,编译器(基本上)只为每个匿名委托创建一个新的“非匿名”委托,即使委托主体相同。因此,当您使用您给出的代码示例时,框架将找不到要取消订阅的委托。 |
|
|
4
3
这恐怕行不通,因为您声明的两个lambda表达式(和委托)实际上是不同的对象,并且返回不同的引用。因此,删除处理程序(
此问题的常见解决方案(您需要删除处理程序)是将lamba表达式重构为适当的方法。另一种方法是为事件处理程序委托维护一个类变量,并添加和删除它,尽管我个人并不喜欢它(这比创建一个普通的方法要麻烦得多(如果有的话) |
|
|
5
2
我认为这行不通。如果确实需要从事件中注销,则必须指定一个显式事件处理程序,以后可以从该处理程序而不是匿名委托中注销。 |
|
|
6
1
如果您在文档中检查Delegate.Equality,您会发现它们没有通过引用进行比较。 |