-
Bir sınıfın miras vermesini yahut bir başka deyişle başka bir sınıf tarafından miras alınmasını engelleyen bir keyworddür.
-
Sadece sınıflarda ve sadece
override
edilmiş metotlarda kullanılabilir. -
Oluşturduğun bir tane sınıfın başka bir sınıf tarafından kalıtımsal olarak ilişkiye tabi tutulmasını istemiyorsan eğer
sealed
keywordünü kullanırız. -
Oluşturduğumuz bir sınıfın uygulama çapında herhangi bir noktada ya da bu uygulamanın dışında .dll olarak referans edilmiş olabilir farklı uygulamalarda kalıtımsal ilişkiye tabii tutulmasını istemiyorsak eğer böyle bir durumda bu sınıfı
sealed
keywordüyle işaretliyoruz. -
Yani bir sınıf
sealed
keywordüyle işaretleniyorsa o sınıf kalıtımsal ilişkiye tabii tutulmaz. -
Bir sınıfın kalıtımsal ilişki sürecinde miras vermesini engelleyen bir keyworddür.
sealed class A
{
}
class B : A
{
}
-
Bir
class
ısealed
keywordüyle işaretlerseniz oclass
tan tövbe bir daha miras alınamaz. -
Yapacağın bir çalışmada oluşturmuş olduğun sınıftan kesinlikle miras alınmasını engellemek istiyorsan
sealed
keywordüyle o sınıfı işaretleyeceksin. -
record
ın da yapısı/fıtratı bir sınıf olacağı içinsealed
keywordünü kullanabiliyoruz. -
Sınıf ve sınıf fıtratında olan bir yapılanmada kullanabileceğimiz bir keyworddür.
-
Kalıtımsal durumlarda atalardan gelen ve birinci dereceden alt sınıf tarafından
override
edilmiş olanvirtual
memberların hiyerarşideki sonraki sınıflar tarafındanoverride
edilmesini ilgili member'ısealed
ile işaretleyerek engelleyebiliriz. -
Pratikte bu yöntem sayesinde üst sınıfın davranışını güvenli bir şekilde kormuş ve ilgili metodun değiştirilmesini önlemiş oluyoruz.
-
Birinci dereceden alt sınıfın dışında diğer torunların buradaki davranışı değiştirmesini istemiyorsan eğer
override
edilmiş member'ısealed
keywordüyle işaretleyip alt sınıflarında bununoverride
edilmesini engelleyebilirsiniz.
-
virtual
ile işaretli olan bir member'ı biz derivedclass
'ta ezebiliriz. -
Atalardan
virtual
olarak gelen bir member'ı hiyerarşide zincirleme olarakoverride
edebiliriz.
-
Sınıfların Davranışlarını Korumak İstediğimizde;
- Kalıtımsal hiyerarşide üst sınıfların özel metotları/davranışları varsa ve bu metotlardaki davranışların alt sınıflar tarafından değiştirilebilir olmasını istemediğimiz durumlarda, o metodu
sealed
olarak işaretleyebiliriz.
- Kalıtımsal hiyerarşide üst sınıfların özel metotları/davranışları varsa ve bu metotlardaki davranışların alt sınıflar tarafından değiştirilebilir olmasını istemediğimiz durumlarda, o metodu
-
Performans İyileştirmesi İstendiğinde;
- Mikro seviyede yapılan bir optimizasyon neticesinde C#'ta bir sınıf
sealed
işe işaretlendiğindesealed
olmayan bir sınıfa göre ufak çapta bir performans artışı gösterdiği anlaşılmıştır. Bunun nedeni, derleyicininsealed
ile işaretlenmiş sınıfın miras alınamayacağını bilerek daha hızlı derleme yapmasıdır.
- Mikro seviyede yapılan bir optimizasyon neticesinde C#'ta bir sınıf
-
Singleton Design Pattern;
- Singleton Design Pattern'da bir sınıfın uygulama çapında tekli bir instance'ının olması amaçlanmaktadır. Haliyle ilgili sınıf
sealed
ile işaretlenerek, bu sınıftan herhangi bir kalıtımsal ilişkinin yaratılmasını engelleyebilir ve tek instance üretimini daha da garanti hale getirmiş oluruz.
- Singleton Design Pattern'da bir sınıfın uygulama çapında tekli bir instance'ının olması amaçlanmaktadır. Haliyle ilgili sınıf
-
Bir sınıfın miras vermesini engellemek istiyorsak başka bir deyişle bir sınıftan miras alınmasını engellemek istiyorsak
sealed
keywordünü kullanabiliriz. O sınıfısealed
ile işaretlediğimizde tövbe bir daha miras alınamaz. -
override
metotlarda da kullanabiliriz davranışı koruyabilmek için.
- Java'da
final
keywordü C#'ta kisealed
keyword'ünün muadilidir.
C c = new();
class A
{
public virtual void X()
{
System.Console.WriteLine("Merbaha A");
}
}
class B : A
{
sealed public override void X()
{
System.Console.WriteLine("Merbaha B");
}
}
class C : B
{
}