我使用 C# 工作,我的工作场所有一些代码标准。其中之一是我们连接的每个事件处理程序(例如KeyDown
)必须在断开Dispose
方法。这有什么好的理由吗?
除非您期望事件的发布者比订阅者活得更久,否则没有理由删除事件处理程序,不是。
这是民间传说成长的主题之一。您实际上只需要以正常的方式考虑它:发布者(例如按钮)有对订阅者的引用。无论如何,发布者和订阅者是否同时有资格进行垃圾收集(这很常见),或者发布者是否有资格进行垃圾收集earlier,那么就不存在GC问题了。
静态事件会导致 GC 问题,因为它们实际上是无限寿命的发布者 - 在可能的情况下,我会完全阻止静态事件。 (我很少发现它们有用。)
另一个可能的问题是,如果您明确想要停止侦听事件,因为如果引发事件,您的对象将会行为异常(例如,它将尝试写入关闭的流)。在这种情况下,是的,您应该删除处理程序。这最有可能是在你的类实现的情况下IDisposable
已经。值得实施的做法虽然不是不可能,但很不寻常IDisposable
just删除事件处理程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)