Sappiamo tutti che System.IO.StreamReader
non è l'unica classe .NET 4.0+ che implementa IDisposable
e un metodo Close()
. Nel caso di StreamReader
in questa domanda, il codice sorgente mostra che la classe base TextReader.Close()
, TextReader.Dispose()
esegue entrambe le stesse righe di codice. È inoltre possibile vedere nel codice che TextReader.Dispose()
è l'implementazione per quando si chiama StreamReader.Dispose()
(poiché non sovrascrive la firma di sovraccarico del metodo di Dispose
).
Quindi, una chiamata a StreamReader.Dispose()
verrà eseguito this inherited line of code, che chiama il metodo protected override StreamReader.Dispose(disposing: true)
e così sarà chiamata StreamReader.Close()
StreamReader.Dispose(disposing: true)
. Quindi per il caso di StreamReader
, Close()
e Dispose()
, è necessario eseguire le stesse righe di codice.
Una risposta più generale, non specifica della classe alla domanda di Close() o Dispose()?, potrebbe essere notare che Microsoft ha abbastanza chiaro documentation on implementing IDisposable
and the Dispose pattern. Una lettura veloce è sufficiente per mostrare che l'implementazione di un metodo Close()
non è un requisito del modello Dispose.
imho il motivo per trovare il metodo Close()
su così tante classi che implementano IDisposable
, è il risultato di convenzione, non requisito.
Qualcuno commentato
Close and Dispose - which to call?
Un esempio di un'altra classe che implementa IDisposable
con il pattern Dispose, e ha un metodo Close()
. Close()
esegue lo stesso codice di Dispose()
in questo caso? Non ho guardato il codice sorgente, ma direi non necessariamente.
fonte
2015-05-25 15:13:54
http://stackoverflow.com/q/61092/102112 – Alex