Perlukah saya Panggil Close() atau Dispose() untuk Objek Strim?
Strim objek, seperti Strim, StreamReader dan StreamWriter, melaksanakan antara muka IDisposable. Mereka juga mempunyai kaedah awam yang dipanggil Close(). Perbezaan antara kaedah ini boleh mengelirukan.
Pelaksanaan Kaedah
Menggunakan Reflector.NET, kita boleh memeriksa pelaksanaan kaedah Close() untuk StreamWriter dan StreamReader:
// StreamWriter public override void Close() { this.Dispose(true); GC.SuppressFinalize(this); } // StreamReader public override void Close() { this.Dispose(true); }
Kaedah Dispose(bool disposing) untuk 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); } }
Begitu juga untuk StreamWriter, kaedah Close() hanya memanggil Dispose(true) secara dalaman.
Equivalence of Close() dan Dispose()
Daripada kod tersebut, ternyata anda boleh memanggil Close() dan Dispose() pada aliran tanpa menjejaskan tingkah laku mereka. Ia adalah kaedah yang setara.
Amalan Terbaik
Walaupun Close() dan Dispose() boleh ditukar ganti, adalah disyorkan untuk menggunakan:
Kesimpulan
Sama ada hendak menggunakan Close() atau Dispose() adalah soal keutamaan dan kebolehbacaan. Kedua-dua kaedah disokong dan mempunyai fungsi yang setara untuk objek aliran. Amalan yang disyorkan ialah menggunakan menggunakan ( ... ) { ... } apabila boleh dan secara eksplisit memanggil Close() apabila perlu untuk meningkatkan kejelasan kod.
Atas ialah kandungan terperinci Close() atau Dispose(): Kaedah Yang Harus Saya Gunakan untuk Objek Strim?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!