【问题标题】:Can you dispose of multiple objects within a Using block?您可以在 Using 块中处理多个对象吗?
【发布时间】:2012-09-18 03:49:42
【问题描述】:

如何处理在 Using 语句中被释放的多个对象?

示例代码

using(MyClass obj = new MyClass())
{
    MyOtherClass objOC= new MyOtherClass()
    TextReader objTR = new StringReader(...);  
    // other code
}

MyClass obj 将被放置在 Using 块的末尾,但接下来呢? MyOtherClass objOCTextReader objTR。据我所知,它们不会被处置,所以我应该在那里有一个嵌套的 Using 块,如下所示?如果物体数量增加,我将需要一个真正的宽屏显示器

以下是否正确?

using(MyClass obj = new MyClass())
{
    using (MyOtherClass objOC= new MyOtherClass())
    {
        using (TextReader objTR = new StringReader(...))
        {
           //code using all three objects 
        }   
    } 
    // other code using just `MyClass obj`
}

MyClass 和 MyOtherClass 都实现了IDisposable

【问题讨论】:

标签: c# .net


【解决方案1】:

是的,您的代码是正确的。以下是您可能需要注意的其他几件事...

您可以在单个 using 语句中声明多个相同类型的对象。来自documentation

using (Font font3 = new Font("Arial", 10.0f), 
            font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}

对于使用不同类型的多个对象,您可以使用单行语法嵌套以节省空间:

using (MyClass obj = new MyClass())
using (MyOtherClass objOC= new MyOtherClass())
using (TextReader objTR = new StringReader(...))
{
    // code using all three objects 
}   

【讨论】:

    【解决方案2】:

    是的,如果您想保证对所有这些都调用Dispose(..),您必须将它们包含在using 语句中,就像第二个示例一样。

    或者您可以在单个 using 语句中声明多个对象。这是编码风格和代码流的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多