这是关于从。net中妥善处理对象的另一个问题。在阅读了许多关于处理最佳实践(以及人们的观点)的不同文章之后,我无法得到这个问题的答案。我有两个表单,Form1和Form2。
Form1
void ShowFormButton_Click(object sender, eventargs e)
{
Form2 form = new Form2();
form.TextChanged += new eventhandler(form_TextChanged);
form.Show(this);
}
Form2
void CloseFormButton_Click(object sender, eventargs e)
{
Close();
}
在Form2中调用Close()时,Form2应该有dispose()方法调用,因为它是通过调用Show()方法打开的,但因为Form1已经注册了TextChanged事件或Form2,这会使Form2不被处置或使GC处置的过程效率较低吗?
Thanks in advance
Form2 = new Form2();的形式。TextChanged += new eventandler (form_TextChanged);之前这意味着,Form2实例引用了Form1的form_TextChanged方法。当Form2关闭时,这不会阻止它被收集,所以在这种情况下,取消订阅不是必须的。
假设Form2订阅了Form1事件。在这种情况下,当Form2关闭时,Form1仍然对Form2有活动引用,并且无法收集Form2,从而造成内存泄漏。
因此,答案取决于订阅方向和事件源/订阅者生命周期。在任何情况下,如果有不清楚的地方,最好取消注册事件。