![]() |
1
184
对你来说,一切都很好。这是一个 保持平衡的事件 目标 所有事件处理程序都处于活动状态。因此,如果我有:
棘手的情况是,发布者很长寿,但订阅者不想加入 那个
编辑: Delegate.Equals(object) 这显然给了平等的行为。 其次,这里有一个简短但完整的程序来显示取消订阅的效果:
(在Mono和.NET3.5SP1上测试。)
这是为了证明在仍然存在对订阅服务器的引用时可以收集事件发布服务器。
结果(在.NET3.5SP1中,Mono在这里的行为似乎有点奇怪。过一段时间我们将对此进行研究):
|
![]() |
2
8
订阅人 出版商 . 如果事件发布服务器超出范围,则 对于订阅服务器(当然不是订阅服务器本身!)使用它,不需要显式删除它们。 下面是我最初的答案,关于如果创建一个事件会发生什么 订阅人 让它在不取消订阅的情况下超出范围。这不适用于你的问题,但我将把它留在历史上。 如果该类仍然是通过事件处理程序注册的,那么它仍然是可访问的。它仍然是一个活的物体。遵循事件图的GC将发现它已连接。是的,您需要显式删除事件处理程序。
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |