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

abstract (C#-Referenz)

Der abstract-Modifizierer gibt an, dass die Implementierung des Elements, das geändert wird, fehlt oder unvollständig ist. Der abstract-Modifizierer kann für Klassen, Methoden, Eigenschaften, Indexer und Ereignisse verwendet werden. In einer Klassendeklaration kann mit dem abstract-Modifizierer angegeben werden, dass die Klasse nur als Basisklasse anderer Klassen verwendet werden soll. Member, die als abstrakt gekennzeichnet oder in einer abstrakten Klasse enthalten sind, müssen von Klassen implementiert werden, die von der abstrakten Klasse abgeleitet sind.

In diesem Beispiel muss die Klasse Square eine Implementierung von Area bereitstellen, weil sie von ShapesClass abgeleitet ist:


abstract class ShapesClass
{
    abstract public int Area();
}
class Square : ShapesClass
{
    int side = 0;

    public Square(int n)
    {
        side = n;
    }
    // Area method is required to avoid 
    // a compile-time error. 
    public override int Area()
    {
        return side * side;
    }

    static void Main() 
    {
        Square sq = new Square(12);
        Console.WriteLine("Area of the square = {0}", sq.Area());
    }

    interface I
    {
        void M();
    }
    abstract class C : I
    {
        public abstract void M();
    }

}
// Output: Area of the square = 144

Abstrakte Klassen weisen die nachstehenden Funktionen auf:

  • Eine abstrakte Klasse darf nicht instanziiert werden.

  • Eine abstrakte Klasse darf abstrakte Methoden und Accessoren enthalten.

  • Es ist nicht möglich, eine abstrakte Klasse unter Verwendung des sealed (C#-Referenz)-Modifizierers zu ändern, da die beiden Modifizierer entgegengesetzte Bedeutungen haben. Der sealed-Modifizierer verhindert, dass eine Klasse geerbt wird, und der abstract-Modifizierer erfordert, dass eine Klasse geerbt wird.

  • Eine nicht abstrakte Klasse, die von einer abstrakten Klasse abgeleitet wurde, muss Implementierungen aller geerbten abstrakten Methoden und Accessoren enthalten.

In einer Methoden- oder Eigenschaftendeklaration kann mit dem abstract-Modifizierer angegeben werden, dass die Methode bzw. Eigenschaft keine Implementierung enthält.

Abstrakte Methoden weisen die nachstehenden Features auf:

  • Eine abstrakte Methode stellt implizit eine virtuelle Methode dar.

  • Abstrakte Methodendeklarationen sind nur in abstrakten Klassen zulässig.

  • Da eine abstrakte Methodendeklaration keine Implementierung bereitstellt, ist kein Methodentext vorhanden. Die Methodendeklaration wird einfach mit einem Semikolon beendet, ohne dass der Signatur geschweifte Klammern ({ }) folgen. Zum Beispiel:

    public abstract void MyMethod();
    

    Die Implementierung wird durch eine überschreibende Methode override (C#-Referenz) bereitgestellt, bei der es sich um einen Member einer nicht abstrakten Klasse handelt.

  • Die Modifizierer static oder virtual dürfen nicht in einer abstrakten Methodendeklaration verwendet werden.

Abstrakte Eigenschaften verhalten sich wie abstrakte Methoden, mit Ausnahme der Unterschiede bei der Deklaration und der Syntax für den Aufruf.

  • Der abstract-Modifizierer darf nicht für eine statische Eigenschaft verwendet werden.

  • Eine abstrakte geerbte Eigenschaft kann in einer abgeleiteten Klasse überschrieben werden, indem eine Eigenschaftendeklaration, die den override-Modifizierer verwendet, eingefügt wird.

Weitere Informationen zu abstrakten Klassen finden Sie unter Abstrakte und versiegelte Klassen und Klassenmember (C#-Programmierhandbuch).

Eine abstrakte Klasse muss eine Implementierung aller Schnittstellenmember bereitstellen.

Eine abstrakte Klasse, die eine Schnittstelle implementiert, ordnet die Schnittstellenmethoden möglicherweise abstrakten Methoden zu. Zum Beispiel:

interface I
{
    void M();
}
abstract class C : I
{
    public abstract void M();
}

In diesem Beispiel wird die DerivedClass-Klasse von der abstrakten BaseClass-Klasse abgeleitet. Die abstrakte Klasse enthält eine abstrakte Methode (AbstractMethod) sowie zwei abstrakte Eigenschaften (X und Y).

    abstract class BaseClass   // Abstract class
    {
        protected int _x = 100;
        protected int _y = 150;
        public abstract void AbstractMethod();   // Abstract method 
        public abstract int X    { get; }
        public abstract int Y    { get; }
    }

    class DerivedClass : BaseClass
    {
        public override void AbstractMethod()
        {
            _x++;
            _y++;
        }

        public override int X   // overriding property
        {
            get
            {
                return _x + 10;
            }
        }

        public override int Y   // overriding property
        {
            get
            {
                return _y + 10;
            }
        }

        static void Main()
        {
            DerivedClass o = new DerivedClass();
            o.AbstractMethod();
            Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
        }
    }
    // Output: x = 111, y = 161

Wenn Sie die abstrakte Klasse im voranstehenden Beispiel unter Verwendung einer Anweisung wie dieser instanziieren:

BaseClass bc = new BaseClass();   // Error

erhalten Sie eine Fehlermeldung, die besagt, dass der Compiler keine Instanz der abstrakten Klasse "BaseClass" erstellen kann.

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

Community-Beiträge

Anzeigen:
© 2015 Microsoft