Son Haberler
Anasayfa / Yazılım / C# / Destructors (Yıkıcılar)

Destructors (Yıkıcılar)

Referans type değişkenler heap üzerinde oluşturulurlar ve oluşturuldukç heap üzerinde yer kaplamaktadırlar ve bu da doğrudan doğruya bellek alanını etkilemektedir.Yeni nesnelerin oluşturulabilmesi için heap alanının temizlenmesi gerekmektedir. Oluşturulan bir nesnenin heap alanından yani yüklendiği bellekten silinmeden hemen önce çalışan yordamlara destructor (yıkıcı) adı verilmektedir. .NET Framework içinde bulunan Garbace Collection (GC), heap üzerinde yani bellekte bulunan ancak referans edilmeyen bir başka deyişle referansların yok olduğu nesneleri artık bu nesne kullanılmıyor diye düşünerek bizim yerimize heap üzerinden temizler. Bu işlem şu şekilde gerçekleşiyor, GC bir liste tutmaktadır, bu liste üzerinde bellekte yer alan fakat referansı olmayan nesneleri geziyor ve bellekte yer açmak adına, yeni nesnelerin oluşturulabilmesi için yer sağlamak adına bu nesneleri temizliyor. Bu işlemi için belli bir zaman aralığı (time interval) söz konusu değil, bellek durumuna göre bu işlemi kendisi yapıyor.

Temizleme işlemi esnasında her nesnenin default Finalize() yordamını çağırıyor. Bunu ifade etmek için C#’da ~(Tilda) karakteri kullanılıyor. Örnek bir Finalize() tanımlar isek;

public class Kisi {
~Kisi ( ) {
//işlemler..
}
}

Bir örnek yaparsak :

Destructors (yıkıcılar) özelliklerini sıralar isek; bu yordam programcı tarafından değil ancak Garbage Collection tarafından çalıştırılır. Bu yordama yeniden bir yükleme (overload) yapılamaz ve miras (inheritence) alınamaz, bu yüzden bir sınıf içinde en fazla bir tane yıkıcı yordam bulunabilir. Bu yordam parametre alamaz ve geriye değer döndürmez. Bu yordam sadece class türünde tanımlanır, struct türlerinde tanımlanamaz.

Ne zaman çalışacakları çok belli olmadığı için kullanılmaz, fakat nesne bellekten silinmeden son kez yapacağı işlemleri, yönetilemeyen kodlar için yıkıcı yordamlara tanımlama yapabiliriz. Örneğin, bir veri tabanı bağlantısını kapamak gibi..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir