1

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

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

4

5 回答 5

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

示例/教程

于 2010-02-25T14:15:57.210 回答
1

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

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

}

是相同的

File f;
try
{
  f = File.Open("...");
}
finally
{
  f.Dispose();
}
于 2010-02-25T14:21:38.107 回答
0

只是为了扩展凯文的答案,使用语句有效地将您的对象实例包装在 try/finally 块中,调用最后部分中的对象 Dispose() 方法,即

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

是相同的

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

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

于 2010-02-25T14:22:56.240 回答
0

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

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

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

  • 当代码移出块时,会自动为您调用重要的 Dispose 方法。
  • 更重要的是,如果代码块出现错误,仍然会调用 Dispose 方法。这就是为什么 using 块真的很有帮助。否则你必须投入大量的错误处理代码。

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

这是Using 关键字的一个很好的解释

于 2010-02-25T14:24:41.200 回答
0

您可以通过两种基本方式使用该using语句。从使用MSDN的指令 (C#)中提取。

  • 为命名空间创建别名(使用别名)。
  • 允许在命名空间中使用类型,这样,您不必限定在该命名空间中使用类型(使用指令)。
于 2010-02-25T14:20:50.160 回答