C#:实例化表单时“使用”?

时间:2010-10-15 03:11:08

标签: c# winforms

我正在查看其他人编写的一些C#代码。只要表单被实例化然后显示,就完成以下操作。它是否正确?为什么你会在这种情况下使用“使用”?

MyForm f;
using (f = new MyForm())
{
    f.ShowDialog();
}

其他问题:

可以替换以下代码吗?

using (MyForm f = new MyForm())
{
    f.ShowDialog();
}

4 个答案:

答案 0 :(得分:12)

WinForms中的Form实现IDisposable模式(它从IDisposable继承Component。原作者正确地确保通过using声明。

答案 1 :(得分:3)

这将MyForm对象f持有的资源限制为使用块。当块退出时,将调用其Dispose方法,并保证在此时“处理”它。因此,它所拥有的任何资源都将得到确定性的清理。此外,不能修改f以引用使用块内的另一个对象。有关更多详细信息,请参阅有关在MSDN中使用的信息:


using in the C# Reference

答案 2 :(得分:3)

也许。如果MyForm实现了IDisposable,这将确保在调用ShowDialog时抛出异常时调用Dispose方法。

否则,除非您想立即强行处置,否则无需使用

答案 3 :(得分:0)

是的,这是IDisposable的'正确'用法。也许MyForm的作者有一些大对象(比如一个大型MemoryStream)或文件资源(例如一个打开的FileStream),它打开并希望确保尽快发布。在这种情况下,在using语句中调用MyForm ctor会有所帮助。

问题2:

在C#3.0+中,您可以使用较短的(并且一样清晰):

使用( var f = new MyForm())