Soll ich Close() oder Dispose() für Stream-Objekte aufrufen?
Stream-Objekte wie Stream, StreamReader und StreamWriter, Implementieren Sie die IDisposable-Schnittstelle. Sie haben auch eine öffentliche Methode namens Close(). Die Unterscheidung zwischen diesen Methoden kann verwirrend sein.
Methodenimplementierung
Mit Reflector.NET können wir die Close()-Methodenimplementierungen für StreamWriter und StreamReader untersuchen:
// StreamWriter public override void Close() { this.Dispose(true); GC.SuppressFinalize(this); } // StreamReader public override void Close() { this.Dispose(true); }
Die Dispose(bool disposing)-Methode für StreamReader:
protected override void Dispose(bool disposing) { if ((this.Closable && disposing) && (this.stream != null)) { this.stream.Close(); } if (this.Closable && (this.stream != null)) { this.stream = null; base.Dispose(disposing); } }
Ähnlich wie bei StreamWriter ruft die Close()-Methode einfach intern Dispose(true) auf.
Äquivalenz von Close() und Dispose()
Aus dem Code geht hervor, dass Sie sowohl Close() als auch Dispose() für Streams aufrufen können, ohne deren Verhalten zu beeinflussen. Es handelt sich um gleichwertige Methoden.
Best Practices
Close() und Dispose() sind zwar austauschbar, es wird jedoch empfohlen, Folgendes zu verwenden:
Fazit
Ob Close() oder Dispose() verwendet wird, ist eine Frage der Präferenz und der Lesbarkeit. Beide Methoden werden unterstützt und verfügen über gleichwertige Funktionalität für Stream-Objekte. Die empfohlene Vorgehensweise besteht darin, nach Möglichkeit die Verwendung von ( ... ) { ... } zu verwenden und bei Bedarf explizit Close() aufzurufen, um die Klarheit des Codes zu verbessern.
Das obige ist der detaillierte Inhalt vonClose() oder Dispose(): Welche Methode sollte ich für Stream-Objekte verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!