Sdílet prostřednictvím


sealed (Referenční dokumentace jazyka C#)

Při použití třídy, sealed modifikátor zabrání dědění z něj další třídy.Následující příklad třídy B dědí z třídy A, ale žádné třídy mohou dědit ze třídy B.

    class A {}    
    sealed class B : A {}

Můžete také použít sealed modifikátor na metodu nebo vlastnost, která potlačí virtuální metodu nebo vlastnost v základní třídě.Umožňuje povolit třídy odvozena od třídy a jim zabránit přepsání konkrétní virtuální metody nebo vlastnosti.

Příklad

V následujícím příkladu Z od Y , ale Z nelze přepsat funkci virtuální F který je deklarován v X a uzavřených v 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("C.F"); }

        // Overriding F2 is allowed. 
        protected override void F2() { Console.WriteLine("Z.F2"); }
    }

Při definování nových metod nebo vlastností ve třídě deriving třídy můžete zabránit objek prohlášením není jim jako virtuální.

Je při použití abstraktní modifikátor zapečetěné třídě, protože abstraktní třídy musí být zděděna třídou, která zajišťuje provádění abstraktní metody nebo vlastnosti.

Při použití metody nebo vlastnosti, sealed modifikátor musí být vždy použit s potlačit.

Protože jsou implicitně uzavřeny struktur, nelze dědit.

Další informace naleznete v tématu Dědičnost (Průvodce programováním v C#).

Další příklady naleznete v tématu Abstraktní a uzavřené třídy a jejich členové (Průvodce programováním v C#).

sealed class SealedClass
    {
        public int x;
        public int y;
    }

    class SealedTest2
    {
        static void Main()
        {
            SealedClass sc = new SealedClass();
            sc.x = 110;
            sc.y = 150;
            Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y);
        }
    }
    // Output: x = 110, y = 150

V předchozím příkladu můžete zkusit dědí ze třídy uzavřených pomocí následujícího příkazu:

class MyDerivedC: SealedClass {} // Error

Výsledkem je chybová zpráva:

'MyDerivedC' cannot inherit from sealed class 'SealedClass'.

Specifikace jazyka C#

Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Poznámky

Chcete-li určit, zda zapečetit třídy, metody nebo vlastnosti, obecně zvažte následující dva body:

  • Potenciální výhody, že odvozené třídy může získat prostřednictvím schopnost přizpůsobit své třídy.

  • Potenciál, že odvozené třídy nelze změnit své třídy v takových způsobem, že by již pracují správně, nebo jako očekávané.

Viz také

Referenční dokumentace

Klíčová slova jazyka C#

Statické třídy a jejich členové (Průvodce programováním v C#)

Abstraktní a uzavřené třídy a jejich členové (Průvodce programováním v C#)

Modifikátory přístupu (Průvodce programováním v C#)

Modifikátory (Referenční dokumentace jazyka C#)

override (Referenční dokumentace jazyka C#)

virtual (Referenční dokumentace jazyka C#)

Koncepty

Průvodce programováním v C#

Další zdroje

Referenční dokumentace jazyka C#