Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
sealed Zastosowanie modyfikatora do klasy uniemożliwia dziedziczenie innych klas z tej klasy. W poniższym przykładzie klasa B dziedziczy z klasy A, ale żadna klasa nie może dziedziczyć z klasy B.
class A {}
sealed class B : A {}
Można również użyć modyfikatora sealed w metodzie lub właściwości, która zastępuje metodę wirtualną lub właściwość w klasie bazowej. Korzystając z tego podejścia, deweloperzy mogą uzyskiwać klasy z klasy, uniemożliwiając im zastępowanie określonych metod wirtualnych lub właściwości.
Dokumentacja języka C# zawiera ostatnio wydaną wersję języka C#. Zawiera również początkową dokumentację dla funkcjonalności w publicznych wersjach testowych nadchodzącego wydania języka.
Dokumentacja identyfikuje dowolną funkcję po raz pierwszy wprowadzoną w ostatnich trzech wersjach języka lub w bieżącej publicznej wersji zapoznawczej.
Wskazówka
Aby dowiedzieć się, kiedy funkcja została po raz pierwszy wprowadzona w języku C#, zapoznaj się z artykułem dotyczącym historii wersji języka C#.
W poniższym przykładzie Z dziedziczy element , Y ale Z nie może zastąpić funkcji F wirtualnej zadeklarowanej w X pliku i zapieczętowanej w Ypliku .
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"); }
}
Podczas definiowania nowych metod lub właściwości w klasie można uniemożliwić zastępowanie klas pochodnych, nie deklarując ich jako wirtualnej.
Po zastąpieniu virtual elementu członkowskiego zadeklarowanego w typie podstawowym można uniemożliwić zastępowanie typów pochodnych przy użyciu sealed słowa kluczowego, jak pokazano w poniższym przykładzie:
public sealed override string ToString() => Value;
Jest to błąd podczas używania modyfikatora abstrakcyjnego z zapieczętowaną klasą, ponieważ klasa abstrakcyjna musi być dziedziczona przez klasę, która zapewnia implementację metod abstrakcyjnych lub właściwości.
Po zastosowaniu sealed modyfikatora do metody lub właściwości należy zawsze używać jej z przesłonięć.
Ponieważ struktury są niejawnie zapieczętowane, nie można ich dziedziczyć.
Aby uzyskać więcej informacji, zobacz Dziedziczenie.
Aby uzyskać więcej przykładów, zobacz Klasy abstrakcyjne i zapieczętowane oraz składowe klas.
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
W poprzednim przykładzie można spróbować dziedziczyć z zapieczętowanej klasy przy użyciu następującej instrukcji:
class MyDerivedC: SealedClass {} // Error
Wynik jest komunikatem o błędzie:
'MyDerivedC': cannot derive from sealed type 'SealedClass'
Aby określić, czy należy przypieczętować klasę, metodę lub właściwość, ogólnie należy wziąć pod uwagę następujące dwa punkty:
- Potencjalne korzyści wynikające z wyprowadzania klas mogą uzyskać dzięki możliwości dostosowywania klasy.
- Potencjał, że klasy pochodne mogą modyfikować klasy w taki sposób, aby nie działały poprawnie lub zgodnie z oczekiwaniami.
Specyfikacja języka C#
Aby uzyskać więcej informacji, zapoznaj się ze specyfikacją języka C#
Zobacz też
- Słowa kluczowe C#
- Klasy statyczne i statyczne składowe klasy
- klas abstrakcyjnych i zapieczętowanych oraz składowych klas
- modyfikatory dostępu
- modyfikatory
- przesłanianie
- wirtualny