C# Sealed Anahtar Sözcüğü

Nesne yönelimli programlamanın temel felsefelerinden biri de kalıtımdır. sealed, sınıflara ve üyelere(metot ve property) uygulanabilen bir anahtar sözcüktür. Anlamı; kapalı, mühürlü şeklinde çevirilebilir. Sınıflar için kalıtımı, üyeler için ise override edilmeyi önler

C# sealed Anahtar Sözcüğü

Nesne yönelimli programlamanın temel felsefelerinden biri de kalıtımdır. sealed, sınıflara ve üyelere(metot ve property) uygulanabilen bir anahtar sözcüktür. Anlamı; kapalı, mühürlü şeklinde çevirilebilir. Sınıflar için kalıtımı, üyeler için ise override edilmeyi önler. Basit örnekler üzerinden inceleme yapalım.

Birbirinden türetilen A,B ve C sınıfları olsun.

Main metodu içerisinde Program tipinden bir nesne örneklediğimizde, Program sınıfının C sınıfından kalıtılması sebebiyle ilgili property’lere erişebildiğimizi görürüz. Zaten kalıtımın temel mantıklarından biri de buydu.

AKat+99QRjw3AAAAAElFTkSuQmCC

Projeyi yukarıdaki hali ile derlediğimizde herhangi bir hata almayacağız. Şimdi de amacımız, C sınıfından yapılacak bir kalıtımı önlemek. Bunun için C sınıfına sealed anahtar sözcüğünü uygulamamız yeterli olacaktır.

sealed ile, C sınıfından herhangi bir kalıtım yapılması halinde derleme zamanı hatası alınmasını sağladık. Son hali ile projemizi derlediğimizde aşağıdaki gibi bir hata mesajı ile karşılaşacağız.

‘sealedKeyword.Program’: cannot derive from sealed type ‘sealedKeyword.C’

Program sınıfının, sealed olarak işaretlenmiş olan C sınıfından kalıtamayacağı mesajı aldık. Dolayısı ile artık C sınıfından kalıtım yapamayacağız.

Şimdi de A sınıfı içerisine virtual bir metot ekleyelim. Daha sonra da B sınıfında bu metodu override edelim.

Program sınıfını B sınıfından kalıtalım ve Test metodunu override etmeye çalışalım.

image

Görüldüğü gibi Test metodu da override edilebilir bir metot olarak karşımıza çıktı.

Programı derlediğimizde hata ile karşılaşmayacağız. Şimdi de B sınıfına giderek Test metodumuzu sealed olarak işaretleyelim.

Tekrar program sınıfına dönelim ve Test metodunu override etmeyi deneyelim.

image

Artık override edilebilecek üyeler listesinde Test metodunu göremeyeceğiz. Sebebi, sealed ile işaretlenmiş olması, yani artık override edilemeyecek olmasıdır. Derleyiciden yardım almayarak manuel olarak override ettiğimizde ise derleyici tarafından bir hata mesajı alacağız.

Programı derlediğimizde alacağımız hata mesajı aşağıdaki gibi olacaktır.

‘sealedKeyword.Program.Test()’: cannot override inherited member ‘sealedKeyword.B.Test()’ because it is sealed

Framework içerisinden örnek vermek gerekirse; string tipi de sealed olarak işaretlenmiştir. Yani string tipinden kalıtım yapamayız.

İçeriği puanla diğer kullanıcılara ışık tut

Murat Öner sitesinden daha fazla şey keşfedin

Okumaya devam etmek ve tüm arşive erişim kazanmak için hemen abone olun.

Okumaya devam et