Todos sabemos System.IO.StreamReader
no es la única clase .NET 4.0+ que implementa IDisposable
y un método Close()
. Para el caso de StreamReader
en esta pregunta, el código fuente muestra que la clase base TextReader.Close()
, TextReader.Dispose()
ambos ejecutan las mismas líneas de código. También puede ver en el código que TextReader.Dispose()
es la implementación para cuando llama al StreamReader.Dispose()
(porque StreamReader
no anula la firma de sobrecarga de método de Dispose
).
Así una llamada a StreamReader.Dispose()
se ejecutará this inherited line of code, que llama al método sustituto protegidos StreamReader.Dispose(disposing: true)
y también lo hará StreamReader.Close()
llamada StreamReader.Dispose(disposing: true)
. Por lo tanto, para el caso de StreamReader
, Close()
y Dispose()
sucede que se ejecutan las mismas líneas de código.
Una respuesta más general, no específica de la clase a la pregunta de ¿Cerrar() o desechar()?, podría ser que tenga en cuenta que Microsoft tiene bastante claro documentation on implementing IDisposable
and the Dispose pattern. Una lectura rápida es suficiente para mostrarle que implementar un método Close()
no es un requisito del patrón Dispose.
iho el motivo para encontrar el método Close()
en tantas clases que implementan IDisposable
, es el resultado de una convención, no un requisito.
alguien comentó
Close and Dispose - which to call?
Un ejemplo de otra clase que implementa IDisposable
con el patrón Dispose, y tiene un método Close()
. ¿Funciona Close()
el mismo código que Dispose()
en este caso? No he visto el código fuente, pero diría que no necesariamente.
http://stackoverflow.com/q/61092/102112 – Alex