【问题标题】:Usage of a using statement [duplicate]using 语句的使用 [重复]
【发布时间】:2010-02-25 14:14:19
【问题描述】:

可能的重复:
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 种不同的实现方式。哪种方式是正确的或受欢迎的方式?

【问题讨论】:

  • 最好的方法是在发布重复问题之前进行一些搜索。
  • 我真希望我有足够的声誉,所以我可以编辑这样的问题,真可惜。 :(
  • 这是您第二次问这个问题。虽然,这个更好,但您应该编辑并改进您的原件,而不是再次询问。
  • 当其他问题关闭时,我认为是否可以编辑它。对不起。下次我会努力的更好。谢谢你的建议。

标签: c# 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 方法。

Example/Tutorial

【讨论】:

    【解决方案2】:

    确保调用 dispose 的语法更短:

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

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

    【讨论】:

      【解决方案3】:

      您可以通过两种基本方式使用using 语句。摘自 MSDN 的using Directive (C#)

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

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          【解决方案5】:

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

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

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

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

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

          这是good explanation of the Using keyword

          【讨论】:

          • 错字:“他们通常处理[非]托管资源”
          猜你喜欢
          • 2010-10-11
          • 2014-06-18
          • 2018-10-17
          • 2011-05-08
          • 2011-03-18
          • 1970-01-01
          • 2018-11-18
          • 2010-10-22
          • 1970-01-01
          相关资源
          最近更新 更多