C#’ta sealed Keyword’ü

Merhaba,

Programlama dünyasında üzerinde çalıştığımız dilin gramer estetiği ve esnekliği yanında o dilin niteleyicileride(modifier) oldukça önemlidir. Nihayetinde modifier dediğimiz yapılar genelde tek bir komut olmasıyla beraber tek bir işlem gerçekleştirmeleriyle bilinirler. Halbuki o dili zenginleştiren özelliklerden biriside bu tarz niteleyicilerin kullanım amaçları dışında farklı artılarıda yanında getirmeleri, barındırabilmeleridir. İşte bu içeriğimizde bu tarz bir varoluşa sahip olan C# programlama dilindeki sealed keywordünü inceliyor olacağız.

Aslında sealed keywordünün ne işe yaradığına baktığımızda(ki birazdan değineceğiz) olayı bu kadar uzatmadan direkt mevzuya girmem daha mantıklı ve zaman açısından maliyetli olabilir. Lakin yukarıda da bahsettiğim gibi bu keyword(ve bunun gibileri) görüldüğünden ziyade bir o kadar da altında olan bir işleve sahiptir.

sealed Keyword’ü Nedir? Ne İşe Yarar?

sealed keywordü bir class ve metod modifier(niteleyici)dır. Eğer bir class sealed komutuyla işaretlenmişse o classtan kalıtım yapılamaz. Yani o class başka bir sınıfın base classı olamaz. Ayriyetten bir metod sealed komutuyla işaretleniyorsa o metodtan türetilen sınıfların ilgili metodu override etmeleri önlenir.

Şimdi gelin sırasıyla bu durumları inceleyelim.

Öncelikle sealed komutuyla bir sınıfı işaretleyelim.
C#'ta sealed Keyword'ü
Gördüğünüz gibi sealed komutu sınıflarda kalıtımı engelleyen bir özelliğe sahiptir.

Şimdide sealed komutunu metod üzerinde inceleyelim.

    class MyClass1
    {
        public virtual void X()
        {
            Console.WriteLine("xxxxx");
        }

        public virtual void Y(string yparam)
        {
            Console.WriteLine(yparam);
        }
    }

    class MyClass2 : MyClass1
    {
        public override void X()
        {
            Console.WriteLine("XXXXX");
        }

        public override void Y(string yparam)
        {
            Console.WriteLine("yyyyyyy" + yparam);
        }
    }

    class MyClass3 : MyClass2
    {
        public override void X()
        {
            Console.WriteLine("XxXxX");
        }

        public override void Y(string yparam)
        {
            base.Y(yparam);
        }
    }

Yukarıda gördüğünüz örnek sınıflardan MyClass1 içerisinde “X” ve “Y” virtual metodları mevcuttur. Bu sınıf MyClass2 tarafından miras alınarak içerisinde metodlar override edilmiştir. Ayriyetten MyClass3’te MyClass2’yi miras alarak MyClass2’de MyClass1’den ezilmiş olan memberları tekrardan ezmiştir.

İşte böyle bir durumda MyClass2 içerisinde override edilmiş metodları sealed ile işaretleyebiliyor ve bu sınıftan miras alan diğer sınıflarda bu metodların override edilmesini engelleyebiliyoruz.

C#'ta sealed Keyword'ü

Ekran görüntüsünde de gördüğünüz gibi MyClass2 içerisinde override edilmiş “Y” metodunu sealed ile işaretleyerek ilgili sınıftan kalıtım alan MyClass3 içerisinde “Y” metodunun override edilmesine mani olmuş olduk. Gördüğünüz gibi “Y” metodu override yazınca gelmemektedir.

Ayriyetten bilmenizde fayda vardır ki, mikro seviyede yapılan bir optimizasyonla anlaşıldığı kadarıyla C#’ta bir sınıf sealed ile işaretlendiğinde sealed olmayan bir sınıfa göre ufak çapta bir performans artışı gösterdiği tespit edilmiştir.

Son olarak, Java’cılara özel. Bu içerikte bahsettiğimiz sealed keywordü Java’da final keywordüyle eşdeğer nitelik göstermektedir.

İşte modifier dediğin böyle olur 🙂

Okuduğunuz için teşekkür ederim…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar dilerim…

Bunlar da hoşunuza gidebilir...

4 Cevaplar

  1. Reşat dedi ki:

    c# üzerinde yüksek düzeyde bir kitap çıkartmanı tavsiye ederim 🙂

  1. 24 Haziran 2016

    […] gördüğünüz gibi struct dediğimiz aslen yapısal ve içerik(implicit) olarak bir sealed class‘tır diyebiliriz. Bunun yanında daha hafif(lightweight) bir class yapısı olduğu […]

  2. 28 Ekim 2016

Bir cevap yazın

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

*

Copy Protected by Chetan's WP-Copyprotect.