Winforms 是否必须在重写的dispose函数中调用windows窗体中控件的所有公开的dispose函数?

Winforms 是否必须在重写的dispose函数中调用windows窗体中控件的所有公开的dispose函数?,winforms,controls,dispose,Winforms,Controls,Dispose,我有一个windows窗体,其中包含许多控件,例如计时器、GridView和绑定源等,所有这些都公开了dispose函数。在这种情况下,我必须调用它们的dispose函数吗 protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose();

我有一个windows窗体,其中包含许多控件,例如计时器、GridView和绑定源等,所有这些都公开了dispose函数。在这种情况下,我必须调用它们的dispose函数吗

        protected override void Dispose(bool disposing)
    {

        if (disposing && (components != null))
        {
            components.Dispose();
        }
        // do I have to write something here ???
        base.Dispose(disposing);
    }
还有components.Dispose()到底做什么


谢谢

不,表格将为您调用Dispose

这是干什么用的?这是从这里拍的

使用此文件的Dispose方法 显式发布的接口 非托管资源与 使用垃圾收集器。这个 对象的使用者可以调用此 方法,当对象不再是 需要


base.Dispose
调用调用
System.Windows.Forms.Form.Dispose
,它处理菜单和其他表单控件。调用在
System.Windows.Forms.Control.Dispose
中结束,它递归地处理所有子控件


只要可以从窗体直接或通过传递访问控件,我想您就不必担心了。

通常,当您通过Visual Studio中的工具箱将控件添加到窗体时,控件将自动被
处理
(在
protected override void Dispose
方法中)

您唯一需要手动处理对象的时间是在您手动创建实现
IDisposable
界面的其他一次性对象时,例如文件句柄(
Stream
StreamReader
…),GDI对象(
Bitmap
Brush
)和非托管资源。手动释放此类型的对象确保通过释放创建的资源遵循良好的编码实践