Tarayıcınız JavaScript! desteklememektedir.

C# Destructor(Yikicilar)

Olusturdugumuz her nesne, söyle tanimlayalim new anahtar kelimesi ile tanimladigimiz her bir sinif instance'i bir referans türüdür ve bellek üzerinde heap bölgesinde tutulur.

En çok dikkat ettigimiz konulardan biri yazilimi gelistirirken tasarruf konusu. Yani rakamsal olarak 0-100 arasinda bir deger saklayacaksak byte türünde degisken tanimliyoruz, int türünden tanimlarsak bellek üzerinde daha fazla yer kaplamamasi için. Bu basit bir örnek tabii, çok daha uzun uzadiya örnekler verilebilir.

Pekala, biz new anahtar kelimesi ile yeni bir nesne türetiyoruz, ama bellek üzerinden silinmesi için herhangi bir islem yapmiyoruz. Yani söyle bir örnek vereyim;
 

SqlCommand komut = new SqlCommand();

komut.Dispose();//dispose ile türettigimiz nesnenin bellek üzerinden silinmesini sagliyoruz.

 

Iste tam olarak anlatmak istedigim bu. Yani isimiz bittikten sonra Dispose islemi yapmak gerekmez mi? Bütün nesnelerde bu mümkün degil. Ama en azindan kendi olusturdugumuz Class'lar da bellek üzerinde temizlenmesi için bir fonksiyon,metot yazarsak, bir nevi Dispose islemi yapmis oluruz.

Standart olarak her Class'in içerisinde, bir Constructor(Yapici) ve Destructor(Yikici) bulunur. 

Biz bu iki arkadasi tanimlamamis olsak dahi onlar nesne olusturuldugunda standart olarak tanimlanir, islemleri yaparlar.
(Eger Constructor(Yapicilar) hakkinda bilginiz yoksa o konu ile alakali makalemi okumanizi öneririm.)

Bu makalemizin konusu Destructor oldugu için Constructor konusuna deginmeyecegim...

Destructor;

~ClassName(){ Console.WriteLine("Class bellekten silindi"); }

Yukaridaki kod blogunda bir Destructor tanimladik. 

  • Destructor'lar parametre almaz.
  • Içerisinde metot,fonksiyon yazamayiz.
  • Biz tanimlamasak dahi GarbageCollector bu islemi standart olarak tüm Class'larda yapar.
  • Destructor'lar çagrilamaz. Class'imizi tanimladigimizda standart çalistirilirlar.