Abstrakte und versiegelte Klassen und Klassenmember (C#-Programmierhandbuch)Abstract and Sealed Classes and Class Members (C# Programming Guide)

Das Schlüsselwort abstract ermöglicht die Erstellung von Klassen und Klassenmembern, die unvollständig sind und in einer abgeleiteten Klasse implementiert werden müssen.The abstract keyword enables you to create classes and class members that are incomplete and must be implemented in a derived class.

Mit dem Schlüsselwort sealed können Sie die Vererbung von Klassen oder bestimmten Klassenmembern unterbinden, die zuvor als virtuell gekennzeichnet wurden.The sealed keyword enables you to prevent the inheritance of a class or certain class members that were previously marked virtual.

Abstrakte Klassen und KlassenmemberAbstract Classes and Class Members

Klassen können durch Festlegen des Schlüsselworts abstract vor der Klassendefinition als abstrakt deklariert werden.Classes can be declared as abstract by putting the keyword abstract before the class definition. Zum Beispiel:For example:

public abstract class A
{
    // Class members here.
}

Eine abstrakte Klasse darf nicht instanziiert werden.An abstract class cannot be instantiated. Der Zweck einer abstrakten Klasse ist die Bereitstellung einer allgemeinen Definition einer Basisklasse, die für mehrere abgeleitete Klassen freigegeben ist.The purpose of an abstract class is to provide a common definition of a base class that multiple derived classes can share. Eine Klassenbibliothek kann beispielsweise eine abstrakte Klasse definieren, die als Parameter für ihre Funktionen verwendet wird. Programmierer, die diese Bibliothek verwenden, benötigen ihre eigene Implementierung der Klasse, die sie von ihr ableiten können.For example, a class library may define an abstract class that is used as a parameter to many of its functions, and require programmers using that library to provide their own implementation of the class by creating a derived class.

Abstrakte Klassen können auch abstrakte Methoden definieren.Abstract classes may also define abstract methods. Zu diesem Zweck wird das Schlüsselwort abstract vor dem Rückgabetyp der Methode einfügt.This is accomplished by adding the keyword abstract before the return type of the method. Zum Beispiel:For example:

public abstract class A
{
    public abstract void DoWork(int i);
}

Abstrakte Methoden verfügen über keine Implementierung, deshalb folgt der Methodendefinition ein Semikolon statt eines normalen Methodenblocks.Abstract methods have no implementation, so the method definition is followed by a semicolon instead of a normal method block. Von der abstrakten Klasse abgeleitete Klassen müssen alle abstrakten Methoden implementieren.Derived classes of the abstract class must implement all abstract methods. Wenn eine abstrakte Klasse eine virtuelle Methode von einer Basisklasse erbt, kann sie die virtuelle Methode mit einer abstrakten Methode überschreiben.When an abstract class inherits a virtual method from a base class, the abstract class can override the virtual method with an abstract method. Zum Beispiel:For example:

// compile with: /target:library
public class D
{
    public virtual void DoWork(int i)
    {
        // Original implementation.
    }
}

public abstract class E : D
{
    public abstract override void DoWork(int i);
}

public class F : E
{
    public override void DoWork(int i)
    {
        // New implementation.
    }
}

Wenn eine virtual-Methode als abstract deklariert ist, bleibt sie für alle Klassen virtuell, die von der abstrakten Klasse erben.If a virtual method is declared abstract, it is still virtual to any class inheriting from the abstract class. Eine Klasse, die eine abstrakte Methode erbt, kann nicht auf die ursprüngliche Implementierung der Methode zugreifen. Im vorherigen Beispiel konnte DoWork auf Klasse F DoWork auf Klasse D nicht aufrufen. So kann eine abstrakte Klasse abgeleitete Klassen dazu zwingen, neue Methodenimplementierungen für virtuelle Methoden bereitzustellen.A class inheriting an abstract method cannot access the original implementation of the method—in the previous example, DoWork on class F cannot call DoWork on class D. In this way, an abstract class can force derived classes to provide new method implementations for virtual methods.

Versiegelte Klassen und KlassenmemberSealed Classes and Class Members

Klassen können durch Festlegen des Schlüsselworts sealed vor der Klassendefinition als sealed deklariert werden.Classes can be declared as sealed by putting the keyword sealed before the class definition. Zum Beispiel:For example:

public sealed class D
{
    // Class members here.
}

Eine versiegelte Klasse kann nicht als Basisklasse verwendet werden.A sealed class cannot be used as a base class. Aus diesem Grund kann sie auch keine abstrakte Klasse sein.For this reason, it cannot also be an abstract class. Von versiegelten Klassen kann nicht abgeleitet werden.Sealed classes prevent derivation. Weil sie nicht als Basisklasse verwendet werden können, können Aufrufe an versiegelte Klassenmember durch Laufzeitoptimierungen etwas beschleunigt werden.Because they can never be used as a base class, some run-time optimizations can make calling sealed class members slightly faster.

Methoden, Indexer, Eigenschaften oder Ereignisse einer abgeleiteten Klasse, die einen virtuellen Member der Basisklasse überschreiben, können diesen Member als versiegelt deklarieren.A method, indexer, property, or event, on a derived class that is overriding a virtual member of the base class can declare that member as sealed. Damit wird der virtuelle Aspekt des Members für jede weitere abgeleitete Klasse aufgehoben.This negates the virtual aspect of the member for any further derived class. Dazu wird in die Klassenmemberdeklaration das Schlüsselwort sealed vor dem Schlüsselwort override eingefügt.This is accomplished by putting the sealed keyword before the override keyword in the class member declaration. Zum Beispiel:For example:

public class D : C
{
    public sealed override void DoWork() { }
}

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
Klassen und StrukturenClasses and Structs
VererbungInheritance
MethodenMethods
FelderFields
Gewusst wie: Definieren von abstrakten EigenschaftenHow to: Define Abstract Properties