C#Form.Close与Form.Dispose
我是C#的新手,我试图看看以前的post,但没有find一个好的答案。
在具有单一窗体的C#Windows窗体应用程序中,是使用Form.Close()
更好还是Form.Dispose()
?
MSDN说,对象内的所有资源都closures,表单被调用时closures。 尽pipe如此,我在网上遇到了一些遵循Dispose而不是Close的例子。
一个人比另一个人有优势吗? 在哪种情况下,我们应该比另一种情况更喜欢?
MSDN上的这个论坛告诉你。
Form.Close()
发送正确的Windows消息来closureswin32窗口。 在这个过程中,如果表单没有以模态方式显示,则在窗体上调用Dispose。 处理表单将释放表单所持有的非托pipe资源。如果你做一个
form1.Show()
或Application.Run(new Form1())
,当调用Close()
时将调用Dispose。但是,如果您使用
form1.ShowDialog()
以模态方式显示表单,则表单将不会被处理,您需要自己调用form1.Dispose()
。 我相信这是你唯一一次担心自己处理表单的时候。
作为一般规则,我总是主张为提供它的任何类显式调用Dispose方法,方法是直接调用方法或包装在“使用”块中。
通常,实现IDisposible的类是这样做的,因为它们包装了一些需要释放的非托pipe资源。 虽然这些类应该具有作为安全措施的终结器,但调用Dispose将有助于更早地释放内存并降低开销。
在Form对象的情况下,正如Kyra所指出的那样,Close方法被logging为代表您调用Dispose,所以您不需要明确地这样做。 不过,对我来说,这总是感觉就像依靠一个实现的细节。 我更喜欢总是调用Close和Dispose来实现它们的类,以防止实现更改/错误,并且为了清晰起见。 正确实施的Dispose方法应该是安全的,可以多次调用。
没有调用Close
可能绕过发送一串Win32的消息,人们会认为是有点重要,虽然我不能具体告诉你为什么…
Close
有提升事件(可以取消)的好处,这样外部人员(对于表单)就可以观察FormClosing
和FormClosed
,从而做出相应的反应。
我不清楚FormClosing
和/或FormClosed
是否被提出,如果你只是处理表单,但我会留给你去试验。