我是否需要处理取消注册事件?

Sea*_*ean 5 .net c# events dispose

假设我有两个类,它们都不是GUI组件.A类是一个短期对象,它注册由长期存在的对象B声明的事件.例如

public A(B b)
{
   b.ChangeEvent += OnChangeEvent;
}
Run Code Online (Sandbox Code Playgroud)

如果A永远不会从B的事件中退出,A将永远不会被垃圾收集?是否需要一个Dispose方法来取消注册B的事件?

还有一个相关的第二个问题.如果A和B都应该在应用程序的整个执行时间内存在,A是否需要取消注册?

flq*_*flq 4

对于你的第一个问题:是的。B 引用了 A。这样,A 的生存时间就和 B 一样长。如果您注册了像 App.OnIdle 这样的事件,那么这是释放 UI 应用程序内存的好方法。

对于第二个:到最后一切都会被杀死。