sealed (C#-Referenz)sealed (C# Reference)

Der Modifizierer sealed verhindert, dass andere Klassen von einer Klasse erben, wenn er auf diese Klasse angewendet wird.When applied to a class, the sealed modifier prevents other classes from inheriting from it. Im folgenden Beispiel erbt die Klasse B von der Klasse A, allerdings kann keine Klasse von der Klasse B erben.In the following example, class B inherits from class A, but no class can inherit from class B.

class A {}      
sealed class B : A {}  

Sie können den Modifizierer sealed auch auf eine Methode oder Eigenschaft anwenden, die eine virtuelle Methode oder Eigenschaft in einer Basisklasse außer Kraft setzt.You can also use the sealed modifier on a method or property that overrides a virtual method or property in a base class. Dadurch können Sie zulassen, dass Klassen von Ihrer Klasse abgeleitet werden, und verhindern, dass sie spezifische virtuelle Methoden oder Eigenschaften außer Kraft setzen.This enables you to allow classes to derive from your class and prevent them from overriding specific virtual methods or properties.

BeispielExample

Im folgenden Beispiel erbt Z von Y, Z kann aber die virtuelle Funktion F nicht außer Kraft setzen, die in X angegeben und in Y versiegelt ist.In the following example, Z inherits from Y but Z cannot override the virtual function F that is declared in X and sealed in 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"); }
}

Wenn Sie neue Methoden oder Eigenschaften in einer Klasse definieren, können Sie verhindern, dass ableitende Klassen sie außer Kraft setzen, indem Sie sie nicht als virtual deklarieren.When you define new methods or properties in a class, you can prevent deriving classes from overriding them by not declaring them as virtual.

Es wäre ein Fehler, den Modifizierer abstract mit einer versiegelten Klasse zu verwenden, da eine abstrakte Klasse von einer Klasse geerbt werden muss, die eine Implementierung der abstrakten Methoden oder Eigenschaften bereitstellt.It is an error to use the abstract modifier with a sealed class, because an abstract class must be inherited by a class that provides an implementation of the abstract methods or properties.

Der Modifizierer sealed muss immer mit override verwendet werden, wenn er auf eine Methode oder Eigenschaft angewendet wird.When applied to a method or property, the sealed modifier must always be used with override.

Da Strukturen implizit versiegelt sind, können sie nicht geerbt werden.Because structs are implicitly sealed, they cannot be inherited.

Weitere Informationen finden Sie unter Inheritance (Vererbung).For more information, see Inheritance.

Weitere Beispiele finden Sie unter Abstrakte und versiegelte Klassen und Klassenmember.For more examples, see Abstract and Sealed Classes and Class Members.

BeispielExample

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 vorherigen Beispiel können Sie mithilfe der folgenden Anweisung versuchen, von der versiegelten Klasse zu erben:In the previous example, you might try to inherit from the sealed class by using the following statement:

class MyDerivedC: SealedClass {} // Error

Daraus ergibt sich eine Fehlermeldung:The result is an error message:

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

C#-ProgrammiersprachenspezifikationC# Language Specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

HinweiseRemarks

Sie sollten generell die folgenden zwei Punkte in Betracht ziehen, um festzustellen, ob Sie eine Klasse, Methode oder Eigenschaft versiegeln sollten:To determine whether to seal a class, method, or property, you should generally consider the following two points:

  • Die potentiellen Vorteile, die ableitende Klassen durch die Möglichkeit, Ihre Klasse anzupassen, erhalten könntenThe potential benefits that deriving classes might gain through the ability to customize your class.

  • Die Möglichkeit, dass ableitende Klassen Ihre Klassen so ändern könnten, dass sie nicht mehr korrekt oder wie erwartet funktionierenThe potential that deriving classes could modify your classes in such a way that they would no longer work correctly or as expected.

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#-SchlüsselwörterC# Keywords
Statische Klassen und statische KlassenmemberStatic Classes and Static Class Members
Abstrakte und versiegelte Klassen und KlassenmemberAbstract and Sealed Classes and Class Members
ZugriffsmodifiziererAccess Modifiers
ModifiziererModifiers
overrideoverride
virtualvirtual