Amalan Terbaik untuk Mengendalikan Objek Strim: Memanggil Close() vs Dispose()
Apabila bekerja dengan objek strim dalam .NET, seperti Stream, StreamReader dan StreamWriter, pembangun sering tertanya-tanya sama ada mereka harus memanggil Close() atau Dispose(). Kelas ini melaksanakan antara muka IDisposable, tetapi juga mentakrifkan kaedah Close() awam, yang membawa kepada kekeliruan.
Memahami Kaedah Close()
Kaedah Close() disediakan sebagai kemudahan kepada pemaju. Apabila dipanggil, ia melupuskan strim secara dalaman, melepaskan sebarang sumber yang tidak terurus. Walau bagaimanapun, ia tidak memanggil kaedah Dispose() yang ditakrifkan dalam antara muka IDisposable.
Dispose() vs Close()
Memanggil Dispose() pada objek strim akan melupuskan objek dan melepaskan sebarang sumber tidak terurus yang berkaitan. Ini ialah kaedah pilihan untuk mengendalikan pelupusan objek kerana ia mematuhi garis panduan IDisposable.
Amalan Terbaik
Walaupun anda boleh memanggil Close() dan Dispose() secara bergantian, adalah disyorkan untuk mengikuti amalan terbaik ini:
Contoh dengan Amalan Terbaik
using (var responseStream = response.GetResponseStream()) { using (var reader = new StreamReader(responseStream)) { using (var writer = new StreamWriter(filename)) { // Process data writer.Close(); } reader.Close(); } }
Dalam contoh ini, kami menggunakan binaan menggunakan() untuk memastikan pelupusan automatik. Walau bagaimanapun, kami secara eksplisit memanggil Close() dalam setiap binaan untuk meningkatkan kebolehbacaan kod.
Mengapa Menggunakan Kedua-dua Close() dan Dispose()?
Sedangkan dokumentasi .NET tidak mengesyorkan menggunakan kedua-dua Close() dan Dispose(), berbuat demikian boleh meningkatkan kebolehbacaan kod dan memastikan tingkah laku yang konsisten merentas kelas berbeza yang mungkin melaksanakan Dispose() secara berbeza. Walau bagaimanapun, adalah penting untuk memahami bahawa memanggil kedua-dua kaedah tidak memberikan sebarang faedah tambahan.
Atas ialah kandungan terperinci Objek Strim dalam .NET: Perlukah Saya Gunakan Close() atau Dispose()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!