【问题标题】:What is the purpose of Using? [duplicate]使用的目的是什么? [复制]
【发布时间】:2010-10-08 08:41:53
【问题描述】:

骗子:Uses of "using" in C#

我看到人们使用以下内容,我想知道它的目的是什么? 是不是对象在被垃圾回收使用后就被销毁了?

例子:

using (Something mySomething = new Something()) {
  mySomething.someProp = "Hey";
}

【问题讨论】:

  • 它也可以通过简单的谷歌搜索和 MSDN 文档找到。
  • @Charles:这里根本不欢迎 GIYF 的答案。
  • 我同意 Rich,我们不允许那种 IRC 精英主义的态度。任何问题都可以,除了这是一个骗子。
  • @Simucal, @Rich B - 重新阅读我的评论后,我可以理解它是如何被误读的。我的评论是真诚的。

标签: .net using-statement


【解决方案1】:

using 语句具有在完成 using 块时处理 () 中的任何内容的有益效果。

【讨论】:

    【解决方案2】:

    using 语句可确保调用 Dispose(),即使在您调用对象上的方法时发生异常。

    【讨论】:

      【解决方案3】:

      Something 类实现IDisposable 时,您可以使用using。即使您在 using 块内遇到异常,它也能确保正确处理对象。

      即,您不必为了调用Dispose 而手动处理潜在的异常,using 块会自动为您处理。

      相当于这样:

      Something mySomething = new Something();
      try
      {
         // this is what's inside your using block
      }
      finally
      {
          if (mySomething != null)
          {
              mySomething.Dispose();
          }
      }
      

      【讨论】:

        【解决方案4】:

        大致使用翻译为:

        Something mySomething = new Something();
        try
        {
          something.someProp = "Hey";
        }
        finally
        {
          if(mySomething != null)
          {
            mySomething.Dispose();
          }
        }
        

        差不多就是这样。目的是支持确定性处理,这是 C# 所没有的,因为它是一种垃圾收集语言。 using / Disposal 模式为程序员提供了一种准确指定类型何时清理其资源的方法。

        【讨论】:

        • @Randolpho,不完全是。该对象在 try...finally 块之外实例化。如果对象无法实例化,则它不能/不需要被释放。
        • @Randolpho,并且生成的 IL 还会在尝试调用 Dispose 之前检查对象是否为空。
        • 好点,卢克。我确实以“大致”作为序言,记住。;)
        • @Randolpho,我并不是要挑剔,我只是想指出这一点,因为您的答案目前是评分最高的答案,所以很多人最终可能会阅读它。 :)
        • 好吧,我已经更正了。不过,我更感兴趣的是解释我的帖子的目的和背景,因为人们经常忽略这一点。
        【解决方案5】:

        使用被翻译成

        try
        {
           ...
        }
        finally
        {
           myObj.Dispose();
        }
        

        编译时(在 IL 中也是如此)。

        所以基本上你应该将它与实现IDisposable 的每个对象一起使用。

        【讨论】:

          【解决方案6】:

          “using”块是一种保证对象的“dispose”方法在退出块时被调用的一种方式。

          这很有用,因为您可以正常退出该块,因为中断,因为您返回,或者因为异常。

          你可以用'try/finally'做同样的事情,但'using'可以更清楚你的意思,并且不需要在块外声明的变量。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-14
            • 2021-12-31
            • 2011-09-13
            • 2011-06-28
            相关资源
            最近更新 更多