Melaksanakan IDisposable Betul dengan Langkah Berjaga-jaga Tambahan
Dengan kemunculan persekitaran pengaturcaraan yang canggih seperti Visual Studio 2012, amalan terbaik lebih dititikberatkan berbanding sebelum ini. Satu amalan sedemikian ialah pelaksanaan yang betul bagi antara muka IDisposable apabila berurusan dengan sumber yang tidak diurus.
Dalam contoh yang disediakan, kelas bernama Pengguna melaksanakan IDisposable. Walau bagaimanapun, Analisis Kod menimbulkan ralat mengenai pelaksanaan yang salah. Untuk memahami masalah ini, adalah penting untuk memahami tujuan IDisposable.
Apakah IDisposable?
IDDisposable membenarkan objek melepaskan kedua-dua sumber terurus dan tidak terurus sebelum sampah dikumpul . Sumber terurus, seperti memori yang diperuntukkan pada timbunan terurus, dituntut semula secara automatik oleh pemungut sampah. Sumber yang tidak diurus, bagaimanapun, seperti pemegang fail atau sambungan pangkalan data, memerlukan pelupusan yang jelas untuk mengelakkan kebocoran sumber.
Melaksanakan IDisposable Dengan Betul
Kod yang disediakan melaksanakan IDisposable dengan cara berikut :
public void Dispose() { id = 0; name = String.Empty; pass = String.Empty; }
Kod ini hanya mengosongkan nilai harta yang mungkin telah ditetapkan apabila kelas itu dibuat seketika. Walau bagaimanapun, tiada sumber tidak terurus dilupuskan, jadi pelaksanaannya tidak betul mengikut peraturan Analisis Kod.
Pelaksanaan Diubahsuai
Cara yang betul untuk melaksanakan IDisposable ditunjukkan di bawah:
public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { // Free managed resources here. } // Free unmanaged resources, if any. }
Dalam pelaksanaan ini, kaedah Buang dimeterai sebagai "Buang(bool)" untuk menampung kedua-dua kes di mana sumber terurus dan tidak terurus perlu dibebaskan. Kaedah Buang(bool) maya yang dilindungi boleh ditindih dalam kelas terbitan untuk menyokong keperluan pembersihan tambahan. Ini memastikan sumber yang tidak terurus dilupuskan dengan betul apabila objek tidak lagi digunakan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Antara Muka IDisposable dengan Betul untuk Mengelakkan Kebocoran Sumber?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!