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
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#)
Koncepcje
Przewodnik programowania w języku C#