C# 显式删除事件处理程序

标签 c# events memory-leaks garbage-collection

我想知道将对象设置为 null 是否会清除所有附加到对象事件的事件处理程序...

例如

Button button = new Button();
button.Click += new EventHandler(Button_Click);
button = null;

button = new Button();
button.Click += new EventHandler(Button_Click);
button = null;

等...

会不会造成内存泄漏?

最佳答案

如果在任何地方都没有对 button 的其他引用,那么就没有必要在此处删除事件处理程序以避免内存泄漏。事件处理程序是单向引用,因此仅当具有事件的对象长期存在并且您希望避免处理程序(即具有处理程序方法的对象)的生命周期超过它们时,才需要删除它们应该。在您的示例中,情况并非如此。

关于C# 显式删除事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1198076/

相关文章:

python - matplotlib:故意阻止代码执行等待 GUI 事件

c# - 每次触发Form.Load事件

java - 如何才能不发生内存泄漏 getInstance()

xml - golang 读取 XML 内存泄漏?

c# - 如果为 null,则 Eval() 显示自定义值

c# - 为什么我的程序的控制流在单步执行阶乘方法时似乎跳来跳去?

c# - 第一个 Windows 服务 - 计时器似乎不计时

c# - 无法从 NHibernate.Driver.OracleDataClientDriver 创建驱动程序(复制本地设置为 true)

javascript - 当有多个动态添加的按钮时,不会触发 onclick 事件

c++ - 对 MFC 项目中的内存泄漏感到困惑,如果从未调用 _CrtDumpMemoryLeaks(),这些内存泄漏就会消失