sealed (C# Başvurusu)
Bir sınıfa uygulandığında, sealed değiştirici diğer sınıfların bundan devralmasını önler. Aşağıdaki örnekte sınıf sınıfından B devralınır A , ancak sınıfından hiçbir sınıf devralamıyor B .
class A {}
sealed class B : A {}
Değiştirici, bir sealed temel sınıftaki sanal bir yöntemi veya özelliği geçersiz kılan bir yöntem veya özellik üzerinde de kullanabilirsiniz. Bu, sınıfların sınıfınızdan türetmesine izin verir ve belirli sanal yöntemlerin veya özelliklerin geçersiz kılınmasını önler.
Örnek
Aşağıdaki örnekte, ' Z den devralır, Y ancak içinde Z F ve korumalı olarak belirtilen sanal işlevi geçersiz kılamazsınız X Y .
class X
{
protected virtual void F() { Console.WriteLine("X.F"); }
protected virtual void F2() { Console.WriteLine("X.F2"); }
}
class Y : X
{
sealed protected override void F() { Console.WriteLine("Y.F"); }
protected override void F2() { Console.WriteLine("Y.F2"); }
}
class Z : Y
{
// Attempting to override F causes compiler error CS0239.
// protected override void F() { Console.WriteLine("Z.F"); }
// Overriding F2 is allowed.
protected override void F2() { Console.WriteLine("Z.F2"); }
}
Bir sınıfta yeni yöntemler veya özellikler tanımladığınızda, türetilen sınıfların bunları sanalolarak bildirmeyerek geçersiz kılmasını engelleyebilirsiniz.
Soyut bir sınıf, soyut yöntemlerin veya özelliklerin bir uygulamasını sağlayan bir sınıf tarafından devralınamadığı için Sealed bir sınıf ile soyut değiştiricinin kullanılması hatadır.
Bir yönteme veya özelliğe uygulandığında, sealed değiştiricinin her zaman geçersiz kılmaile kullanılması gerekir.
Yapılar örtük olarak mühürlenmediğinden devralınamaz.
Daha fazla bilgi için bkz. Devralma.
Daha fazla örnek için bkz. soyut ve korumalı sınıflar ve sınıf üyeleri.
sealed class SealedClass
{
public int x;
public int y;
}
class SealedTest2
{
static void Main()
{
var sc = new SealedClass();
sc.x = 110;
sc.y = 150;
Console.WriteLine($"x = {sc.x}, y = {sc.y}");
}
}
// Output: x = 110, y = 150
Önceki örnekte, aşağıdaki ifadeyi kullanarak Sealed sınıfından devralmayı deneyebilirsiniz:
class MyDerivedC: SealedClass {} // Error
Sonuç bir hata iletisidir:
'MyDerivedC': cannot derive from sealed type 'SealedClass'
Açıklamalar
Bir sınıfın, yöntemin veya özelliğin mühürlendirilip zorlanmayacağını anlamak için genellikle aşağıdaki iki noktayı dikkate almalısınız:
Sınıfların türetireceği olası avantajlar, sınıfınızı özelleştirme özelliği aracılığıyla elde edebilir.
Sınıfları Türetmenin olasılığı, sınıflarınızı daha sonra düzgün şekilde veya beklendiği gibi çalışmayacak şekilde değiştirebilir.
C# dili belirtimi
Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.