sealed (C# Başvurusu)

Bir sınıfa uygulandığında sealed , değiştirici diğer sınıfların bu sınıftan devralmasını engeller. Aşağıdaki örnekte, sınıfı B sınıfından Adevralır, ancak hiçbir sınıf sınıfından Bdevralamaz.

class A {}
sealed class B : A {}

Değiştiriciyi, temel sınıftaki sealed bir sanal yöntemi veya özelliği geçersiz kılan bir yöntemde veya özellikte de kullanabilirsiniz. Bu, sınıfların sınıfınızdan türetilmesine izin vermenizi ve belirli sanal yöntemleri veya özellikleri geçersiz kılmalarını engellemenizi sağlar.

Örnek

Aşağıdaki örnekte, Z içinde Y bildirilen X ve ile korumalı Ysanal işlevi F devralır ancak Z geçersiz kılamaz.

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ı sanal olarak bildirmeyerek geçersiz kılmasını önleyebilirsiniz.

Soyut sınıfın soyut yöntemlerin veya özelliklerin uygulanmasını sağlayan bir sınıf tarafından devralınması gerektiğinden soyut değiştiriciyi korumalı bir sınıfla kullanmak bir hatadır.

Bir yönteme veya özelliğe uygulandığında sealed , değiştirici her zaman geçersiz kılma ile kullanılmalıdır.

Yapılar örtük olarak mühürlendiği için 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 deyimi kullanarak korumalı sınıftan 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ürlenip mühürlenmeyeceğini belirlemek için genellikle aşağıdaki iki noktayı göz önünde bulundurmanız gerekir:

  • Sınıf türetmenin, sınıfınızı özelleştirme özelliğiyle elde edebileceğiniz olası avantajlar.

  • Türetilen sınıfların sınıflarınızı artık düzgün veya beklendiği gibi çalışmayabilecek şekilde değiştirme olasılığı.

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.

Ayrıca bkz.