Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 20506|Yanıt: 1

[Kaynak] C# Derin Dalış - Yıkıcılar

[Bağlantıyı kopyala]
Yayınlandı 17.08.2018 13:54:43 | | |
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





Önceki:C# Farklı nesneleri koşullu olarak deduplicate eder
Önümüzdeki:İstisna mesajı: "GüçYazıYazarIstisna: IsPrima...
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com