2012-09-26 6 views
21

¿Cómo cuidar la eliminación de varios objetos en una instrucción Using?¿Puede deshacerse de varios objetos dentro de un bloque de Uso?

Código de ejemplo

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

MyClass obj se puede disponer en el extremo del bloque de Uso, pero luego lo sobre MyOtherClass objOC y TextReader objTR. Por lo que yo sé, no se eliminarán, así que ¿debería tener un bloque de uso anidado allí, como este a continuación? Voy a necesitar un monitor de pantalla ancha real si aumenta el número de objetos

¿Es esto correcto a continuación?

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` 
} 

MiClase & MyOtherClass ambas aplicar IDisposable

+1

relacionado: [anidada utilizando declaraciones en C#] (http://stackoverflow.com/questions/1329739/nested-using-statements-inc-c-sharp) –

Respuesta

51

Sí, su código es correcto. Aquí hay un par de otras cosas que quizás desee saber ...

Puede declarar múltiples objetos del mismo tipo en una sola declaración de uso. De los documentation:

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

Para el uso de varios objetos de diferentes tipos puede anidar utilizando la sintaxis de una línea para ahorrar espacio:

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

Sí, si quieres gurantee la llamada Dispose(..) en todos ellos que tienen para encerrarlos dentro using DECLARACIÓN como en el segundo ejemplo.

O puede declarar varios objetos dentro de una sola declaración using. Es una cuestión de estilo de codificación y flujo de código.

Cuestiones relacionadas