sealed (C#-Referenz)

Aktualisiert: November 2007

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 C von B, C kann jedoch nicht die virtuelle Funktion F überschreiben, die in A deklariert und in B 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 hierzu finden Sie unter Vererbung (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 den folgenden Abschnitten von C#-Programmiersprachenspezifikation:

  • 10.1.1.2 Versiegelte Klassen

  • 10.6.5 Versiegelte Methoden

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

Konzepte

C#-Programmierhandbuch

Referenz

C#-Schlüsselwörter

Statische Klassen und statische Klassenmember (C#-Programmierhandbuch)

Abstrakte und versiegelte Klassen und Klassenmember (C#-Programmierhandbuch)

Zugriffsmodifizierer (C#-Programmierhandbuch)

Modifizierer (C#-Referenz)

override (C#-Referenz)

virtual (C#-Referenz)

Weitere Ressourcen

C#-Referenz