当我创建一个表单时,自动生成的代码中没有包含重写的Dispose方法。这是否意味着表单中的所有控件都没有被调用Dispose方法?
Dispose
方法时,它将为其Controls
集合中的每个控件调用Dispose
方法。这些控件也会依次执行相同的操作,因此最终应该已经调用了所有控件的Dispose
方法。请注意,这不是基于控件是否存在于设计者中,而是基于在调用Dispose
方法时在窗体的Controls
集合中找到的控件实例。Dispose
方法而没有将调用传播到基类或遍历包含的控件并在其中调用Dispose
。protected override void Dispose(bool disposing)
{
if(disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing)
}
base.Dispose();
调用将负责清理添加到窗体中的控件。Timer
、HelpProvider
或 BackgroundWorker
),否则 components
字段为 null
。components
处理这些组件的释放。它不会调用其他控件(如按钮、文本框等)的 dispose 方法。 - Fredrik Mörkbase.Dispose()
来处理的,即在Control.Dispose()
内部。实际上还有更多的清理工作,当您使用Reflector查看Form.Dispose()
时会发现。 - Dirk Vollmar