2010-04-14 6 views

Respuesta

16

El bloque que usa es un atajo para un bloque try/finally con una llamada a Dispose() sobre cualquier objeto que implemente IDisposable.

En el caso de las secuencias y los escritores de secuencias, Dispose() generalmente llama a Close() manualmente. El uso del reflector, aquí está el método Dispose de XmlWriter:

protected virtual void Dispose(bool disposing) 
{ 
    if (this.WriteState != WriteState.Closed) 
    { 
     try 
     { 
      this.Close(); 
     } 
     catch 
     { 
     } 
    } 
} 

Así que la respuesta corta es sí, el bloque using se encargará de cerrar la XmlWriter para usted.

+0

Y este es de hecho el código que acabo de ver. Todo lo que hace es llamar 'Cerrar'. –

3

No, no es necesario llamar por separado. Para eso es exactamente el bloque de uso.

Cuando la ejecución sale del bloque que usa, el XmlWriter se elimina, y en el interior, XmlWriter.Dispose llama al XmlWriter.Close.

3

Pero ... reflector en el XmltTextWriter.Close() muestran:

si (this.closeOutput) { this.stream.Close(); } this.Stream = null;

el indicador closeOutput se establece en settings.CloseOutput, que puede ser falso.

¿Estás seguro de que el controlador es libre al usar la expresión "using" en el XmlTextWriter?

+0

Ahora muestra la función virtual vacía: public virtual void Close() {} – amuliar

Cuestiones relacionadas