2010-04-14 10 views
8

Supongamos que tengo un método de este modo:.NET/C# - Disponer de un objeto con el "uso de la declaración

public byte[] GetThoseBytes() 
{ 
    using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) 
    { 
     ms.WriteByte(1); 
     ms.WriteByte(2); 
     return ms.ToArray(); 
    } 
} 

¿Sería esto todavía disponer del objeto 'MS'? Estoy teniendo dudas, tal vez porque algo se devuelve antes de que el bloque de instrucciones haya finalizado.

Gracias, AJ.

Respuesta

11

Sí. using (x = e) { s } es azúcar para { x = e; try { s } finally { x.Dispose(); } }

+1

Y un retorno dentro del cuerpo de un intento ... finalmente ejecutará la cláusula finally antes de que realmente se produzca el retorno. – dthorpe

+0

@dthorpe: Umm, sí. Whoops :) –

4

Sí, Using creates a try..finally block, por lo que elimina el ms (e incluso realiza una comprobación nula en caso de que configure ns en nulo).

+1

(Simplemente ignore esas tonterías sobre "El CLR convierte su código en MSIL" en ese artículo) –

4

Sí, la idea detrás de la declaración de Uso es que elimina automáticamente cualquier corriente/objeto que esté "usando". bien hecho.

Cuestiones relacionadas