Share via


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

Aktualisiert: November 2007

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.

Mit dem sealed-Schlüsselwort können Sie die Vererbung von Klassen oder bestimmten Klassenmembern unterbinden, die zuvor als virtual gekennzeichnet wurden.

Abstrakte Klassen und Klassenmember

Klassen können durch Festlegen des Schlüsselworts abstract vor der Klassendefinition als abstrakt deklariert werden. Beispiele:

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

Eine abstrakte Klasse darf nicht instanziiert werden. Der Zweck einer abstrakten Klasse ist die Bereitstellung einer allgemeinen Definition einer Basisklasse, die für mehrere abgeleitete Klassen freigegeben ist. 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.

Abstrakte Klassen können auch abstrakte Methoden definieren. Zu diesem Zweck wird das abstract-Schlüsselwort vor den Rückgabetyp der Methode einfügt. Beispiel:

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. Von der abstrakten Klasse abgeleitete Klassen müssen alle abstrakten Methoden implementieren. Wenn eine abstrakte Klasse eine virtuelle Methode von einer Basisklasse erbt, kann sie die virtuelle Methode mit einer abstrakten Methode überschreiben. Beispiel:

// 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. Eine Klasse, die eine abstrakte Methode erbt, hat keinen Zugriff auf die ursprüngliche Implementierung der Methode: Im obigen Beispiel kann DoWork in Klasse F nicht DoWork in Klasse D aufrufen. Auf diese Weise kann eine abstrakte Klasse abgeleitete Klassen zwingen, neue Methoden für virtuelle Methoden zu implementieren.

Versiegelte Klassen und Klassenmember

Klassen können durch Festlegen des Schlüsselworts sealed vor der Klassendefinition als versiegelt deklariert werden. Beispiele:

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

Eine versiegelte Klasse kann nicht als Basisklasse verwendet werden. Aus diesem Grund kann sie auch keine abstrakte Klasse sein. Von versiegelten Klassen kann nicht abgeleitet werden. Weil sie nicht als Basisklasse verwendet werden können, können Aufrufe an versiegelte Klassenmember durch Laufzeitoptimierungen etwas beschleunigt werden.

Member, Methoden, Felder, Eigenschaften oder Ereignisse einer abgeleiteten Klasse, die einen virtuellen Member der Basisklasse überschreiben, können diesen Member als versiegelt deklarieren. Damit wird der virtuelle Aspekt des Members für jede weitere abgeleitete Klasse aufgehoben. Dazu wird in die Klassenmemberdeklaration das sealed-Schlüsselwort vor dem override-Schlüsselwort eingefügt. Beispiel:

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

Siehe auch

Aufgaben

Gewusst wie: Definieren von abstrakten Eigenschaften (C#-Programmierhandbuch)

Konzepte

C#-Programmierhandbuch

Referenz

Klassen und Strukturen (C#-Programmierhandbuch)

Vererbung (C#-Programmierhandbuch)

Methoden (C#-Programmierhandbuch)

Felder (C#-Programmierhandbuch)