Anasayfa / Yazılım / C# / Static Classes (Statik Sınıflar)

Static Classes (Statik Sınıflar)

Statik üyelerdeki durumu şöyle kısaca bir hatırlarsak, statik bir üye oluşturulduktan sonra ilgili class altındaki statik bir üyeye erişebilmek için ilgili class için bir instance almadan ulaşabileceğimizi, hatta instance aldıktan sonra bu üyelere ulaşamadığımızı anımsayabiliriz. İçinde sadece statik üye olan bir class için hiç bir zaman bu class’tan türeyecek nesneye ihtiyacımızın olmayacağını söyleyebiliriz o halde ama bu durum şu demek değildir, bu class’tan nesne oluşturamayacağımız anlamına gelmemelidir.

Aşağıdaki örnekte görüldüğü gibi statik üye KokAl methodu içeren bir islem classından nesne oluşturulabiliyor, fakat nesne oluşturabilsek dahi bunu kullanamıyoruz, dolayısı ile sadece statik üyesi olan bir classdan nesne oluşturarak bellekte yer işgal etmenin anlamı yok.

İşte bu durumu engellemek için bir default constructor private olarak tanımlanabilir.

Sarı bantlı alanda görüldüğü gibi default constructor tanımlandıktan sonra bu sefer bir instance alınamıyor ve gereksiz yere bu yüzden bellekte yer işgal edilmesinin önüne geçilebiliyor.

Eğer classımı direkt olarak static şekilde tanımlar isem, bu sefer default constructor tanımlandıktan sonraki duruma yine erişebilir ve default constructor kullanmak zorunda kalmam.

Peki hangi durumlarda static class tercih edilebilir? Bu sorunun cevabı nesneyebağımlı olmayan işlemlerin yapıldığı durumlar olarak açıklanabilir. Helper Classlar gibi durumlar örneğin. Static Class’lar sadece statik üye içerebilirler, diğerleri tanımlanamazlar ve mutlaka üyelerin static keyword’ü eklenmelidir, aksi halde hata verir. Başka bir sınıftan inheritence alamazlar. .NET nesne mantığı gereği System.Object classından türemişlerdir. Bu classlardan static de olsa başka classlar üretilemez.

3 yorum

  1. cüneyt atalay yardım

    Teşekkür ederim paylaşımınız için. Hiç bilmediğim halde makalenizi okuyup anlayabildim.

  2. Eyvallah hocam

Bir cevap yazın

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