Bugün işleyeceğimiz konu Destructor(yıkıcı-yok edici) metot;
konu içeriğimizin başlıkları şu şekilde olacak;
- Destructor nedir
- Söz Dizimi
- Destructor Özellikleri
- Destructor Örnek Uygulama
Destructor Nedir
Daha önceki yazılarımızda constructor (kurucu metotlardan bahsetmiştik) ilgili yazıya buradan ulaşabilirsiniz.Destructor (yıkıcı metot) olarak isimlendirelibilir.c# içinde bizim tanımladığımız sınıflar yada framework ile birlikte gelen yerleşik sınıfları hafızaya çıkarıp birer nesne oluşturduğumuz vakit hafızadan silimeden hemen önce çalışan metotlardır. Destructor çağırılabilir bir metot değildir ve genel olarak bu işlemi garbage collector denilen mekanizma program içinde kendisi otomatik yapmaktadır. Bizim blok içinde kullanmış olduğumuz nesne yada değişkenler normal şartlarda blok sonuna gelindiğinde kapanan süslü parantez ile birlikte bellekten otomatik olarak düşerler . Sınıflar ve GC ise farklı davranış gösterirler şöyleki ; sınıflar heapta yer işgal ettiklerinden çöp toplayıcı mekanizma olan garbage collector sınıfın kullanılmadığı bir anda nesneyi kendisi otomatik temizlemektedir. Hangi sınıfın kullanılmadığına kendi içinde tutmuş olduğu sayaça bakarak karar verir , uygun olanı siler belleği boşaltır. Bunu yapma nedeni heapta boş alanı belleğe kazandırmak içindir. Destructordan farklı olarak GC sınıfı çağırılabilir.Bazı durumlarda biz GC sınıfını çağırıp kendimiz bu temizleme işlemini yapmak istesekte GC nin bu çağrıya cevap verme süresi tam kestirilemez, genelde programları kapatırken otomatik olarak devreye girer, Şimdi Destructor söz dizimini görelim sonrasında yapacağımız bir örnek ile konuyu biraz daha netliğe kavuşturalım
Destructor Söz Dizimi
Constructor söz Diziminden tek farkı başına erişim belirleyicisi almaması ve tilde ~ işaretinin gelmesidir
~ MyClass()
{
buraya kodlarımızı yazarız.
}
Destructor Özellikleri
Maddeler halinde ifade edilecek olursa:
- Destructor metodlar çağırılamazlar
- Çağırılamadığı için aşırı yükleme hali yoktur.Overload edilemezler
- Erişim belirleyicisi yoktur.
- Destructorlar bir sınıf için sadece bir tane bulunur
- Kalıtımları yoktur miras alınamazlar
- Struct(yapı)larda destructor olmaz classlarda olur.
Destructor Örnek
visual studioda bir windows formu açalım ismine Destructor adı verelim ve formumuza 3 tane button ekleyerek text değerlerini aşağıdaki gibi girelim.
kod tarafına geçerek orada bir class oluşturalım
classımızın içide bu şekilde şimdi butonların altına yazdığımız kodları görelim
birinci buton sınıfı kurarken ikincisi sınıfı silen garbage collector sınıfının metodunu çağırıyor ,üçüncüsü ise formu kapatıyor. Şimdi buton button1'e basıp sınıfı kurduğumuzda yapıcı metot çalışacak ve bizim karşımıza şöyle bir ekran gelecek.
sınıf kuruldu ve bizde mesajımızı görmüş olduk,programı kapat butonuna basarsak ekrana bu sefer "yine bekleriz.güle güle" mesajı gelir. Burada tuhaf gibi gelen durum şudur ki programı kapat butonun altında sadece this.Close(); metodu var ama biz programı kapatınca mesajı almış olduk ,bunun nedeni program kapanırken sınıfında bellekten temizleniyorolması yani ile destructor metodunun içindeki kodun çalışıyor ol masıdır, aşağıdaki resimde nesne temizlendikten sonraki mesaj kutusunu görüyoruz
programı baştan çalıştırıp tekrar birinci butona basıp ilk mesajı aldıktan sonra misafirleri yolcu et butonuna basarsak tekrar "yine bekleriz.güle güle"mesajı gelir ama bu sefer programı kapat butonuna bastığımızda hiç bir mesaj almadan program sonlanmış olur. Birden fazla sınıflarla çalıştığımızda GC ile nesneleri bellekten temizlemek iyi bir yöntemdir. Evet bir makalenin daha sonuna geldik ,baska bir yazıda görüşünceye kadar sağlıcakla kalın.