2009-02-04 10 views
14

Ahora sé que el patrón de uso es una implementación de IDisposable, es decir, que se ha configurado Try/Catch/Finally y se invoca a Dispose en el objeto. Mi pregunta es cómo se maneja el método Close.Desechable usando el patrón

MSDN dice que no se llama, pero he leído lo contrario.

Sé que FileStream hereda de Stream que se explica here. Ahora que dice no anular Close() porque lo llama Dispose().

Entonces, ¿algunas clases solo llaman a Close() en sus métodos Dispose() o lo hace usando la llamada Close()?

Respuesta

18

La declaración usingúnica sabe de Dispose(), pero Stream.Dispose llamadas Close(), como documented in MSDN:

Tenga en cuenta que debido a los requisitos atrasadas de compatibilidad, la implementación de este del método difiere de la orientación recomendada para el Eliminar el patrón. Este método llama a Cerrar, que luego llama a Stream.Dispose (Boolean).

+1

aww maldición, he estado durmiendo –

+0

Bien, esto es lo que pensé de la documentación. Gracias Jon. –

+2

@George: ¿No te refieres a Skeeted? –

7

utilizando llamadas Eliminar() solo. El método Dispose() podría llamar a Close() si así es como se implementa.

1

No creo que el uso de llamadas Close(), no tenga manera de saber que debe llamar a esa función en particular. Entonces debe estar llamando a disponer, y eso a su vez está llamando a cerrar.

0

En clases .Net Close() call Dispose(). Deberías hacer lo mismo.

2

Cerrar() no es parte de la interfaz IDisposable, por lo que su uso no tiene forma de saber si debe llamarse o no. using solo llamará a Dispose(), pero los objetos inteligentemente diseñados se cerrarán en el método Dispose().

Cuestiones relacionadas