我想知道将对象设置为 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/