Destructorlar C#'da nadiren kullanılır, bu yüzden birçok kişi onları unutmuştur, ancak pek işe yaramıyorlar ve çalışmaları pek işe yaramaz.
Bir. Yıkıcıların özellikleri:
Yıkıcılar yalnızca sınıflar halinde var olabilir, yapılar içinde değil; Yıkıcı, erişim kontrol değiştiricileri, statik modifikatörleri, soyut değiştiricileri, sanal değiştiricileri vb. dahil olmak üzere herhangi bir modifikatöre sahip olamaz; Yıkıcının parametreleri yoktur, yani aşırı yüklenme olmaz.
İki. Yıkıcı ne zaman çağrılacak:
Yıkıcı (yıkıcı) ise nesne çöp toplayıcı tarafından geri dönüştürüldüğünde çağrılır, ancak çöp toplayıcının bir özelliği vardır: tembeldir, Değişkeni kapsamdan ve ömründen çıktıktan hemen sonra geri dönüştürmez, ancak uygun olduğunu düşündüğü zaman, genellikle hafıza sıkı olduğunda geri dönüştürür. Örneğin:
Yöntem btn_Click döndükten sonra de sonlandırılmalıdır, ancak yıkıcı çağrılmaz, bu da çöp toplayıcının onu geri dönüştürmediğini gösterir; Formu kapattığınızda, yıkıcı çalıştırılır; bu da programın sonunda çöp toplayıcının isteksizce geri dönüştürmeye zorlandığını gösterir (^-^). Tabii ki, geri dönüşümü zorunlu kılmak için GC.Collect() arayabiliriz:
btn1'e tıkladığınızda, de1 ve yeni Demo() sonlandırılır ve yıkıcı çağrılır. de2 henüz ömrü dolmadığı için GC.Collect yöntemi çağrılsa bile geri dönüştürülmez; btn1_Click geri döndüğünde, DE2 ömrü dolmuş olur, ancak çöp toplayıcının tembelliği nedeniyle hâlâ geri dönüştürülmez; btn2 GC.Collect yöntemini çağırana kadar de2 geri kazanılır ve yıkıcısı çağrılır.
Yıkıcı çağrılarını önlemenin bir yolu, benzersiz bir yöntem tanımlayan IDisposable arayüzü uygulamaktır: Dispose(). Bu, yıkıcının dahili çağrılmasını engeller; yani sıkılırsanız, GC.SuppressFinalize(^-^) çağırmadan bu arayüzü uygulayabilirsiniz; bu arayüz anlamsızdır çünkü yıkıcıyı engellemez:
Artık de1'in yıkıcısı çağrılmayacak.
Üç. Yıkıcının özü:
Bir yıkıcı temelde şu biçimde bir yöntemdir:
Genellikle yıkıcıların sadece sistem tarafından çağrılabileceğini, programcıların kendisi tarafından çağrılmayacağını düşünürüz, ancak bu tamamen doğru değildir ve yıkıcılar açıkça da çağrılabilir, sonuçta bu sadece bir yöntemdir:
Sınıfta yönetilmeyen kaynaklar açılmadıkça yıkıcı gerekmez
|