sealed (C#-Referenz)
Wenn der sealed-Modifizierer auf eine Klasse angewendet wird, verhindert er, dass andere Klassen von dieser Klasse erben. Im folgenden Beispiel erbt die Klasse B von der Klasse A, es kann jedoch keine Klasse von der Klasse B erben.
class A {}
sealed class B : A {}
Sie können den sealed-Modifizierer auch auf eine Methode oder Eigenschaft anwenden, die eine virtuelle Methode oder Eigenschaft in einer Basisklasse überschreibt. Auf diese Weise ermöglichen Sie, dass Klassen von Ihrer Klasse erben, und verhindern, dass sie bestimmte virtuelle Methoden oder Eigenschaften überschreiben.
Beispiel
Im folgenden Beispiel erbt Z von Y, Z kann jedoch nicht die virtuelle Funktion F überschreiben, die in X deklariert und in Y versiegelt wird.
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("X.F3"); }
}
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"); }
}
Wenn Sie neue Methoden oder Eigenschaften in einer Klasse definieren, können Sie verhindern, dass diese durch abgeleitete Klassen überschrieben werden, indem Sie sie nicht als virtual deklarieren.
Verwenden Sie den abstract-Modifizierer nicht mit einer versiegelten Klasse, da eine abstrakte Klasse von einer Klasse geerbt werden muss, die eine Implementierung der abstrakten Methoden oder Eigenschaften bereitstellt.
Wenn der sealed-Modifizierer auf eine Methode oder eine Eigenschaft angewendet wird, muss er stets mit override verwendet werden.
Strukturen sind implizit versiegelt und können deshalb nicht geerbt werden.
Weitere Informationen finden Sie unter Vererbung (C#-Programmierhandbuch).
Weitere Beispiele finden Sie unter Abstrakte und versiegelte Klassen und Klassenmember (C#-Programmierhandbuch).
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
Im voranstehenden Beispiel können Sie versuchen, von der versiegelten Klasse zu erben, indem Sie folgende Anweisung verwenden:
class MyDerivedC: SealedClass {} // Error
Das Ergebnis ist eine Fehlermeldung:
'MyDerivedC' cannot inherit from sealed class 'SealedClass'.
C#-Programmiersprachenspezifikation
Weitere Informationen finden Sie in der C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.
Hinweise
Um zu ermitteln, ob eine Klasse, Methode oder Eigenschaft versiegelt werden soll, beachten Sie die folgenden beiden Punkte:
Die möglichen Vorteile für abgeleitete Klassen durch die Möglichkeit, Ihre Klasse anzupassen
Die Möglichkeit, dass abgeleitete Klassen Ihre Klassen in einer Weise ändern können, dass diese nicht mehr korrekt funktionieren
Siehe auch
Referenz
Statische Klassen und statische Klassenmember (C#-Programmierhandbuch)
Abstrakte und versiegelte Klassen und Klassenmember (C#-Programmierhandbuch)
Zugriffsmodifizierer (C#-Programmierhandbuch)