静态事件处理程序和非静态事件处理程序有什么区别?

11

这两者之间有很大的区别吗?

2个回答

16

语义上没有区别,但如果不小心使用静态事件处理程序可能会导致内存泄漏。有关更多信息,请参见此文章

我自己也遇到过这个问题,尝试使用静态事件处理程序来使应用程序范围内的数据源保持最新状态;但是事件处理程序阻止了我的BindingSource组件被释放,导致出现各种奇怪的问题...


+1 给你的警告,@Bradley。在 Dispose() 之前,你难道不只需要取消订阅事件吗? - IAbstract
1
@dboarman 没错,这很重要。 对于任何不实现 IDisposable 的内容,您需要非常小心... 最好的做法可能是确保订阅静态事件的订阅者始终实现它。 还要确保您的对象实际上被处理! (这个之前曾捉住过我) - Bradley Smith
同意...静态事件应该谨慎使用。 - IAbstract
2
内存泄漏问题出现在静态事件上,而不是静态事件处理程序。这两者并不相同。 - Maxence

5

实际上没有什么影响。这意味着当处理程序是静态的时,就没有this在作用域中(与所有静态方法一样)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接