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.
Ş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.
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…