2012-09-26 153 views
21

如何照顾在使用语句中处理掉的多个对象?你可以在一个Using块中处理多个对象吗?

示例代码

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

MyClass obj将被布置在使用块的结尾,但随后什么约 MyOtherClass objOCTextReader objTR。据我所知,他们不会被处置,所以我应该有一个嵌套的使用块,如下所示?如果物体数量增加,我将需要一台真正的宽屏幕显示器

这是否正确?

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

+1

相关:[嵌套使用语句在C#](HTTP:/ /stackoverflow.com/questions/1329739/nested-using-statements-in-c-sharp) –

回答

51

是的,你的代码是正确的。这里有一些你可能想要知道的其他东西...

你可以在一个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 statment就像在第二个例子。

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

相关问题