C# İle Sealed Anahtar Kelimesinin Kullanımı

7.06.2017 Hikmet Okumuş 2424 2 C#


Merhaba arkadaşlar,

Kalıtım, bir nesne üyelerinin farklı nesne / nesnelere aktarılmasına ve üyelerin bu nesneler tarafından kullanılmasına yarayan OOP nin en önemli özelliklerinden birisidir. Sealed kullanımı öncesinde kalıtım konusunun tam anlamı ile oturmuş olması gerekmektedir. Sealed, sınıfların kalıtım işlemini engellemek için kullanılan bir anahtar kelimedir. Sealed anahtar kelimesi bir sınıf için uygulanacak ise kalıtımı, bir üye için uygulanacak ise üyenin override edilmesini engellemektedir. Kısaca örnekler üzerinden inceleyelim.

Sınıf İçin Kullanımı

X sınıfı Y sınıfına miras olarak atanmaktadır.

    class X
    {
      
    }

    class Y : X
    {
                                        
    }

X sınıfı için kalıtımı engelleyelim. Bunun için class ifadesinin başına Sealed anahtarını ekliyoruz.

    sealed class X
    {
       
    }

    class Y : X
    {

    }

Bu işlem sonrasında derleme zamanında aşağıdaki gibi bir hata ile karşılaşırız. Bu hata bize X sınıfının herhangi bir nesneye kalıtım ile aktarılamayacağını söylemektedir.

www.hikmetokumus.com

Sınıf Üyeleri İçin Kullanımı

Sealed anahtar kelimesi eğer bir override metod için kullanılırsa, ilgili sınıf başka bir sınıfa kalıtım ile aktarıldığı zaman metodun override edilmesini engellemiş olur. Örnek sınıfımıza bir metod ekleyelim.

    class X
    {
        protected virtual void Test()
        {
            Console.WriteLine("X.Test");
        }
    }

    class Y : X
    {
    
    }

Override etmek istediğimizde Test metodu listede karşımıza çıkmaktadır.

www.hikmetokumus.com

    class X
    {
        protected virtual void Test()
        {
            Console.WriteLine("X.Test");
        }
    }

    class Y : X
    {
        protected override void Test()
        {
            Console.WriteLine("Y.Test");
        }
    }

Şimdi Y sınıfı içerisindeki Test metoduna sealed anahtarını ekleyelim.

    class X
    {
        protected virtual void Test()
        {
            Console.WriteLine("X.Test");
        }
    }

    class Y : X
    {
        protected sealed override void Test()
        {
            Console.WriteLine("Y.Test");
        }
    }

    class Z : Y
    {
    
    }

Yeni eklediğimiz Z sınıfı Y sınıfından kalıtım almaktadır. Şimdi Z sınıfı için override edilecek üyeleri inceleyelim.

www.hikmetokumus.com

Görüldüğü gibi override edilebilecek üyeler arasında Test metodu yer almamaktadır. Z sınıfından Test metoduna erişim için, Z sınıfının bir kopyası üzerinden ya da sınıf içerisinde base anahtar kelimesi ile miras alınan üyelere erişilebilir ve Y içerisindeki Test metodu bu şekilde kullanılabilir. Ama Y içerisinde Test metodu sealed anahtar kelimesi ile engellendiği için, bu sınıfı miras alan sınıflarda override edilemez.

Y sınıfı içerisinde Test metodu sealed ile engellenmemiş olsun ve Z sınıfından override edelim.

    class X
    {
        protected virtual void Test()
        {
            Console.WriteLine("X.Test");
        }
    }

    class Y : X
    {
        protected override void Test()
        {
            Console.WriteLine("Y.Test");
        }
    }

    class Z : Y
    {
        protected override void Test()
        {
            Console.WriteLine("Z.Test");
        }
    }

Eğer override işleminden sonra Y sınıfında Test metodu için sealed anahtar kelimesini kullanırsak, derleyici tarafından aşağıdaki gibi bir hata ile karşılaşırız.

    class X
    {
        protected virtual void Test()
        {
            Console.WriteLine("X.Test");
        }
    }

    class Y : X
    {
        protected sealed override void Test()
        {
            Console.WriteLine("Y.Test");
        }
    }

    class Z : Y
    {
        protected override void Test()
        {
            Console.WriteLine("Z.Test");
        }
    }

www.hikmetokumus.com

Uygulamalarınızda kalıtımın yapılmasını istemediğiniz sınıflarda güvenliği sağlamak ya da yanlış kalıtım işlemlerini engellemek için sealed anahtarını kullanabilirsiniz.


Başarılar dilerim.


Kullanıcı Yorumları


hikmet okumuş makale yorum
ramazan şerif
25.08.2018 22:43:24

çok başarılı makale teşekkürler .

hikmet okumuş makale yorum
Bahadır Kara
4.01.2019 16:05:18

Çok teşekkürler 



Yorum