Udostępnij za pośrednictwem


sealed (odwołanie w C#)

Po zastosowaniu do klasy, sealed modyfikator uniemożliwia innych klas dziedziczących go.W poniższym przykładzie klasy B dziedziczy z klasy A, ale klasa nie może dziedziczyć po klasie B.

    class A {}    
    sealed class B : A {}

Można również użyć sealed modyfikator metoda lub właściwość, która zastępuje wirtualnego metodę lub właściwość w klasie podstawowej.Dzięki temu można umożliwić klas dziedziczyć po klasie i uniemożliwić przesłanianie szczególnych metod wirtualnych lub właściwości.

Przykład

W poniższym przykładzie Z dziedziczy z Y , ale Z nie można zastąpić funkcję wirtualną F , jest zadeklarowany w X i zamkniętych w 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"); }
    }

Podczas definiowania nowych metod lub właściwości w klasie, można zapobiec klas wynikających z zastąpieniem przez nie deklarująca je jako wirtualnego.

Jest błędem, aby użyć abstrakcyjna modyfikator z klasy zapieczętowanej, ponieważ klasa abstrakcyjna musi być dziedziczone przez klasy, który zapewnia implementację metody abstrakcyjne lub właściwości.

Po zastosowaniu do metody lub właściwości, sealed modyfikator należy zawsze używać z zastąpić.

Ponieważ strukturach niejawnie są zaplombowane, nie może być dziedziczona.

Aby uzyskać więcej informacji, zobacz Dziedziczenie (Przewodnik programowania w języku C#).

Aby uzyskać więcej przykładów, zobacz Klasy abstrakcyjne i zapieczętowane oraz członkowie klas (Przewodnik programowania w języku 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

W poprzednim przykładzie możesz spróbować dziedziczą z klasy zapieczętowanej przy użyciu następujących instrukcji:

class MyDerivedC: SealedClass {} // Error

Wynik jest komunikat o błędzie:

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

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.

Uwagi

Aby ustalić, czy zamknięciem klasy, metody lub właściwości, zazwyczaj należy rozważyć następujące dwa punkty:

  • Potencjalne korzyści, że wynikające z klas może uzyskać poprzez możliwość dostosowania swojej klasy.

  • Potencjał, że wynikające z klas może zmodyfikować klas w taki sposób, że może przestać działać poprawnie lub oczekuje.

Zobacz też

Informacje

Słowa kluczowe języka C#

Klasy statyczne i statyczni członkowie klas (Przewodnik programowania w języku C#)

Klasy abstrakcyjne i zapieczętowane oraz członkowie klas (Przewodnik programowania w języku C#)

Modyfikatory dostępu (Przewodnik programowania w języku C#)

Modyfikatory (odwołanie w C#)

override (odwołanie w C#)

virtual (odwołanie w C#)

Koncepcje

Przewodnik programowania w języku C#

Inne zasoby

Odwołanie w C#