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.

4 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. Merhaba İsmail bey makalelerinizi okuyorum.Teşekkür ederim.
    Aşağıdaki class ile ilgili bir sorum olacaktı.
    İlk önce button basıp degeri verdikten sonra checkbox ile degeri yazdırmak istedigimde ulaşamıyorum bunun sebebi nedir acaba?

    class musteri
    {
    private string ad11;
    public string ADI
    {
    get { return ad11; }
    set { ad11 =value; }
    }
    }
    musteri person = new musteri();

    protected void Button1_Click(object sender, EventArgs e)
    {

    person.ADI = “21”;
    Label1.Text = person.ADI.ToString();
    }
    protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
    {

    Label1.Text =person.ADI+”dfddff”;

    }

  3. Eyvallah hocam

Bir cevap yazın

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