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.
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.
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…
c# üzerinde yüksek düzeyde bir kitap çıkartmanı tavsiye ederim 🙂
Böyle güzel tavsiyelere her zaman açığım… 🙂
Çok sevindirdin beni kardeşim, sağolasın. 😉
Anlatılabilecek en sade ve doğru şekilde anlatmışsınız, teşekkür ederim.
Faydalandıysanız ne mutlu Esra Hanım.
Kolay gelsin.
Anlatımınızın sadeliği ve açıklayıcılığı harika, kafam karıştığı noktalarda bloğunuza girip konu hakkındaki bilgilere başvuruyorum, konunun genel bilgileri dışında uç ve az bilinen bilgileri vermeniz ekstra artı katıyor. Yukarıdaki arkadaşında dediği gibi kitap veya video serisi yayınlamanız yazılım öğrenmek isteyenler için güzel olacaktır. Başarılarınız devamını dilerim, Saygılar…
Çok teşekkür ederim 🙂
Faydalandıysanız ne mutlu…
İnşallah ngakademi.com‘da önerinize paralel olarak Türkiye’de fark yaratacağız. Yakın zamanda yeni çekmeye başladığım ve uzun yıllar güncelliğini koruyacak olan, derinlemesine içerikler barındıran video yayınlarını satışa çıkaracağım.
Sevgiler.
allah senden razı olsun sen olmasan bir .ok anlamıyoruz
🙂