使用using语句

时间:2010-02-25 14:14:19

标签: c# using

  

可能重复:
  Which is better, and when: using statement or calling Dispose() on an IDisposable in C#?
  When should I use “using” blocks in C#?
  using a using if statement?

正确地说,我将如何使用using声明?我有一个教程打开,我不明白。我可以看到超过1种不同的实现方式。哪种方式正确或偏好?

5 个答案:

答案 0 :(得分:9)

using语句适用于任何实现IDisposable的对象。

using (var my_object = new IDisposableObject ())
{

    //do my_object code here.


} //once the program reaches here, it calls my_object.Dispose();

通常,这用于具有在程序完成时手动需要处理(关闭)的连接的对象。例如,打开文件和数据库的连接。

即使代码中有错误,using语句也会调用Dispose,因此它类似于在try catch语句的finally块中调用Dispose方法。

Example/Tutorial

答案 1 :(得分:1)

确保调用dispose是一种较短的语法:

using (File f = File.Open("..."))
{

}

相同
File f;
try
{
  f = File.Open("...");
}
finally
{
  f.Dispose();
}

答案 2 :(得分:0)

有两种基本方法可以使用using语句。从MSDN中的using Directive (C#)中提取。

  • 为命名空间创建别名(使用别名)。
  • 允许在命名空间中使用类型,这样就不必限定在该命名空间中使用类型(using指令)。

答案 3 :(得分:0)

为了扩展Kevin的答案,using语句有效地将对象实例化包装在try / finally块中,在最后一节中调用对象Dispose()方法,即

using(myObject m = new myObjecyt())
{
   // Code here
}

相同
myObject m = new myObjecyt()
try
{
   // Code here
}
finally
{
   m.Dispose();
}

这可以通过检查MSIL来验证。

答案 4 :(得分:0)

“使用”关键字有助于在.net中安全,清晰地完成某件事。这是某些对象的属性处理。您可能已经了解了.Net中我们是如何进行垃圾收集的,这意味着对于许多对象,我们在使用它们时不必关心它们。然而,其他对象需要有一个名为Dispose的方法。最好的做法是,只要一个对象有一个Dispose方法,那么我们应该在完成该对象时调用该方法。

(它们通常处理unmanaged resources。这意味着它正在使用不受.NET运行时控制的内存或其他计算机部件。因此,当垃圾收集到达丢弃的.Net对象时,它无法这可能会导致内存泄漏和各种其他问题。一个很好的例子就是ADO.NET Connection对象。反复不是处理连接对象会导致数据库问题。)

Using关键字也与此“Dispose”方法相关联。更准确的说,当一个对象有一个Dispose方法时,我们要么( A 。)调用。当我们完成它时会消除,或者( B 。)将我们的代码放在使用块中。 Using块为您做了几件事:

  • 当代码移出块时,会自动为您调用重要的Dispose方法。
  • 更重要的是,如果代码块中存在错误,仍会调用Dispose方法。这就是使用块非常有用的原因。否则你必须输入很多错误处理代码。

关键是对于许多具有Dispose方法的对象,错误处理特别重要。我们的代码很多,我们不需要错误处理;发生错误的后果不是真正的问题。但对于这些IDisposable对象,错误往往是一个问题,也许是一个大问题。因此,.Net为忙碌的开发人员提供了一种语法,可以添加最基本的错误处理并继续前进。始终至少从使用块开始;也许以后你会转向更高级的错误处理,但至少你已经有了这个基本的安全性。

这是一个good explanation of the Using keyword