War diese Seite hilfreich?
Ihr Feedback ist uns wichtig. Teilen Sie uns Ihre Meinung mit.
Weiteres Feedback?
1500 verbleibende Zeichen
Exportieren (0) Drucken
Alle erweitern
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

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

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 Schlüsselwort sealed können Sie die Vererbung von Klassen oder bestimmten Klassenmembern unterbinden, die zuvor als virtuell gekennzeichnet wurden.

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

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 Schlüsselwort abstract vor dem Rückgabetyp der Methode einfügt. Zum 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. Zum 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.

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

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.

Methoden, Indexer, 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 Schlüsselwort sealed vor dem Schlüsselwort override eingefügt. Zum Beispiel:

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

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft