使用"using"实例化和简单实例化之间有什么区别

Spo*_*ina 0 c#

我一直在研究一些代码.我有一个问题:

这两个代码有什么区别?

using (FORM formExemple = new FORM ())
{
formExemple.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)

FORM formExemple = new FORM ();
formExemple.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

Phi*_*idt 8

using调用对象的Dispose()方法在完成后自行清理.它通常处理诸如关闭打开连接和/或释放内存之类的事情.如果以其他方式实例化,则必须手动执行此操作.您只能using在实现IDisposable接口的对象上使用,这可确保Dispose()对象存在方法.


Jus*_*ner 6

using块用于自动处理实现的对象IDisposable.第一个Dispose()在块结束时被调用.使用块还将确保在异常情况下正确处理对象.

当开发人员确定他们不再需要该对象时,第二个不需要并且需要处理.


Jon*_*eet 5

与以往一样,请查阅文档 - MSDN C#using语句指南或C#规范(它是C#5规范中的8.13节).

using语句只能与实现类型一起使用IDisposable,并且它基本上确保在初始表达式(资源获取表达式)中出现的任何资源都被置于块的末尾,即使抛出异常也是如此.您的第一个代码段大致相当于:

FORM formExemple = new FORM(); // I hope you don't *really* use these names
try
{
    formExemple.ShowDialog();
}
finally
{
    formExemple.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

还有一点比这更多,请注意:

  • 资源获取表达式中using声明的任何变量的范围是语句本身
  • 它处理空值
  • 它处理using语句中变量的变化(原始值仍然处理)

基本上,它可以更容易地清理需要及时处理的资源 - 网络流,文件句柄,数据库连接,图形对象等.