使用声明

可能重复:
哪个更好,何时:使用语句或在C#中的IDisposable上调用Dispose()?
我什么时候应该在C#中使用“使用”块?
使用if语句?

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

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方法。

实施例/教程

这是一个更短的语法,以确保调用dispose:

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

是相同的

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

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

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

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

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

是相同的

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

这可以通过检查MSIL来validation。

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

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

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

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

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

以下是Using关键字的一个很好的解释 。