Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 20506|Jawab: 1

[Sumber] C# Deep Dive - Destructor

[Salin tautan]
Diposting pada 17/08/2018 13.54.43 | | |
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





Mantan:C# Objek deduplikasi bersyarat yang berbeda
Depan:Pesan pengecualian: "StrongTypingException: IsPrima...
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com