Destruktor jarang digunakan di C#, sehingga banyak orang melupakannya, meskipun tidak banyak berguna dan tidak berguna untuk dipelajari.
Satu. Karakteristik destruktor:
Destructor hanya dapat ada dalam kelas, bukan struktur; Destructor tidak dapat memiliki pengubah apa pun, termasuk pengubah kontrol akses, pengubah statis, pengubah abstrak, pengubah virtual, dll.; Destructor tidak memiliki parameter, yang berarti tidak ada kelebihan beban.
Dua. Kapan harus memanggil destruktor:
Destructor disebut ketika objek didaur ulang oleh pengumpul sampah, tetapi pengumpul sampah memiliki karakteristik, malas, Itu tidak mendaur ulang variabel segera setelah meninggalkan ruang lingkup dan masa pakainya, tetapi hanya ketika menganggapnya sesuai, biasanya ketika memori ketat. Sebagai contoh:
Setelah metode btn_Click kembali, de harus dihentikan, tetapi penghancurnya tidak dipanggil, menunjukkan bahwa pengumpul sampah tidak mendaur ulangnya; Saat Anda menutup formulir, penghancur dieksekusi, menunjukkan bahwa di akhir program, pengumpul sampah dengan enggan dipaksa untuk mendaur ulangnya (^-^). Tentu saja, kita dapat memanggil GC.Collect() untuk memaksa daur ulang:
Saat Anda mengklik btn1, de1 dan Demo() baru dihentikan dan destructor dipanggil. de2 belum kedaluwarsa masa pakainya, jadi meskipun metode GC.Collect dipanggil, itu tidak akan didaur ulang; ketika btn1_Click kembali, de2 telah kedaluwarsa masa pakainya, tetapi karena kemalasan pemulung sampah, tetap tidak didaur ulang; Baru setelah btn2 memanggil metode GC.Collect, de2 direklamasi dan penghancurnya dipanggil.
Salah satu cara untuk mencegah panggilan destructor adalah dengan mengimplementasikan antarmuka IDisposable, yang mendefinisikan metode unik: Dispose(). Ini mencegah destructor dipanggil secara internal, yang berarti bahwa jika Anda bosan, Anda dapat mengimplementasikan antarmuka ini tanpa memanggil GC.SuppressFinalize(^-^), yang tidak berarti karena tidak memblokir destructor:
Sekarang penghancur de1 tidak akan dipanggil.
Tiga. Inti dari penghancur:
Destructor pada dasarnya adalah metode yang berbentuk:
Biasanya kita berpikir bahwa destruktor hanya dapat dipanggil oleh sistem, bukan oleh pemrogram itu sendiri, tetapi ini tidak sepenuhnya benar, dan destruktor juga dapat disebut secara eksplisit, bagaimanapun juga, itu hanya metode:
Destructor tidak diperlukan kecuali sumber daya yang tidak dikelola dibuka di kelas
|