abstract (C#-Referenz)abstract (C# Reference)

Der abstract-Modifizierer gibt an, dass dem modifizierten Objekt eine Implementierung fehlt oder dass diese unvollständig ist.The abstract modifier indicates that the thing being modified has a missing or incomplete implementation. Der abstract-Modifizierer kann für Klassen, Methoden, Eigenschaften, Indexer und Ereignisse verwendet werden.The abstract modifier can be used with classes, methods, properties, indexers, and events. Verwenden Sie den abstract-Modifizierer in einer Klassendeklaration, um anzugeben, dass die Klasse nur die Basisklasse für eine andere Klasse sein soll.Use the abstract modifier in a class declaration to indicate that a class is intended only to be a base class of other classes. Als abstrakt markierte Member oder Member in einer abstrakten Klasse müssen von Klassen, die von der abstrakten Klasse abgeleitet wurden, implementiert werden.Members marked as abstract, or included in an abstract class, must be implemented by classes that derive from the abstract class.

BeispielExample

In diesem Beispiel muss die Klasse Square eine Implementierung von Area bereitstellen, da sie von ShapesClass abgeleitet ist:In this example, the class Square must provide an implementation of Area because it derives from ShapesClass:


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 folgenden Funktionen auf:Abstract classes have the following features:

  • Eine abstrakte Klasse darf nicht instanziiert werden.An abstract class cannot be instantiated.

  • Eine abstrakte Klasse enthält möglicherweise abstrakte Methode und Accessoren.An abstract class may contain abstract methods and accessors.

  • Eine abstrakte Klasse kann nicht mit dem sealed-Modifizierer geändert werden, da sich die beiden Modifizierer gegenseitig ausschließen.It is not possible to modify an abstract class with the sealed modifier because the two modifers have opposite meanings. Der sealed-Modifizierer verhindert das Vererben einer Klasse, und der abstract-Modifizierer erfordert das Vererben einer Klasse.The sealed modifier prevents a class from being inherited and the abstract modifier requires a class to be inherited.

  • Eine nicht abstrakte Klasse, die von einer abstrakten Klasse abgeleitet wurde, muss Implementierungen aller geerbten abstrakten Methoden und Accessoren enthalten.A non-abstract class derived from an abstract class must include actual implementations of all inherited abstract methods and accessors.

Verwenden Sie den abstract-Modifizierer in einer Methoden- oder Eigenschaftendeklaration, um anzugeben, dass die Methode oder Eigenschaft keine Implementierung enthalten.Use the abstract modifier in a method or property declaration to indicate that the method or property does not contain implementation.

Abstrakte Methoden weisen die folgenden Funktionen auf:Abstract methods have the following features:

  • Eine abstrakte Methode ist implizit eine virtuelle Methode.An abstract method is implicitly a virtual method.

  • Abstrakte Methodendeklarationen sind nur in abstrakten Klassen zulässig.Abstract method declarations are only permitted in abstract classes.

  • Es gibt keinen Methodenkörper, da eine abstrakte Methodendeklaration keine Implementierungen bietet; die Methodendeklaration enden ganz einfach mit einem Semikolon; auf die Signatur folgen keine geschweiften Klammern ({ }).Because an abstract method declaration provides no actual implementation, there is no method body; the method declaration simply ends with a semicolon and there are no curly braces ({ }) following the signature. Zum Beispiel:For example:

    public abstract void MyMethod();  
    

    Die Implementierung wird von der Methode override zur Verfügung gestellt, die ein Member einer nicht abstrakten Klasse ist.The implementation is provided by an method override, which is a member of a non-abstract class.

  • Es ist unzulässig, die Modifizierer static oder virtual in einer abstrakten Methodendeklaration zu verwenden.It is an error to use the static or virtual modifiers in an abstract method declaration.

Abstrakte Eigenschaften verhalten sich wie abstrakte Methoden – sie unterscheiden sich lediglich in der Deklarations- und Aufrufsyntax.Abstract properties behave like abstract methods, except for the differences in declaration and invocation syntax.

  • Es ist ein unzulässig, den abstract-Modifizierer für eine statische Eigenschaft zu verwenden.It is an error to use the abstract modifier on a static property.

  • Eine abstrakte vererbte Eigenschaft kann in einer abgeleiteten Klasse mithilfe der Eigenschaftendeklaration, die den Modifizierer override verwendet, außer Kraft gesetzt werden.An abstract inherited property can be overridden in a derived class by including a property declaration that uses the override modifier.

Weitere Informationen über abstrakte Klassen finden Sie unter Abstrakte und versiegelte Klassen und Klassenmember.For more information about abstract classes, see Abstract and Sealed Classes and Class Members.

Eine abstrakte Klasse muss eine Implementierung für alle Schnittstellenmember bereitstellen.An abstract class must provide implementation for all interface members.

Eine abstrakte Klasse, die eine Schnittstelle implementiert, ordnet die Schnittstellenmethoden möglicherweise abstrakten Methoden zu.An abstract class that implements an interface might map the interface methods onto abstract methods. Zum Beispiel:For example:

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

BeispielExample

In diesem Beispiel wird die DerivedClass-Klasse von der abstrakten Klasse BaseClass abgeleitet.In this example, the class DerivedClass is derived from an abstract class BaseClass. Die abstrakte Klasse enthält eine abstrakte Methode, AbstractMethod, und zwei abstrakte Eigenschaften, X und Y.The abstract class contains an abstract method, AbstractMethod, and two abstract properties, X and 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 beim vorherigen Beispiel versuchen, die abstrakte Klasse mithilfe des folgenden Anweisungsbeispiels zu instanziieren:In the preceding example, if you attempt to instantiate the abstract class by using a statement like this:

BaseClass bc = new BaseClass();   // Error  

Sie erhalten eine Fehlermeldung, dass der Compiler keine Instanz der abstrakten Klasse „BaseClass“ erstellen kann.You will get an error saying that the compiler cannot create an instance of the abstract class 'BaseClass'.

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#.

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
ModifiziererModifiers
virtualvirtual
overrideoverride
C#-SchlüsselwörterC# Keywords