ein Projekt von goloroden.de

abstract

Allgemeines

Kennzeichnet eine Klasse als abstrakt, so dass diese Klasse nicht instanziiert, sondern nur vererbt werden kann. Alle abstrakten Methoden, Eigenschaften, Ereignisse und Indexer einer abstrakten Klasse müssen in einer abgeleiteten Klasse implementiert werden.

Beipiel

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;

namespace GoloRoden.GuideToCSharp
{
    /// <summary>
    /// Represents an abstract foo class.
    /// </summary>
    public abstract class Foo
    {
        /// <summary>
        /// Represents a bar method.
        /// </summary>
        public abstract void Bar();
    }

    /// <summary>
    /// Represents a class that derives from Foo.
    /// </summary>
    public class DerivedClass : Foo
    {
        /// <summary>
        /// Represents a bar method.
        /// </summary>
        public override void Bar()
        {
            // TODO gr: Implement base method.
            //          2008-01-05
        }
    }
}

Details

Da eine abstrakte Klasse vererbt werden muss, kann sie nicht mit dem Schlüsselwort sealed gekennzeichnet werden. Sie kann so wohl abstrakte wie auch nicht-abstrakte Element enthalten, wobei eine abgeleitete Klasse zumindest alle abstrakten Elemente der abstrakten Klasse implementieren muss.

Eine abstrakte Methode ist implizit virtuell und kann nur in einer abstrakten Klasse definiert werden. Da sie implizit virtuell ist, kann sie nicht mit den Schlüsselwörtern static oder virtual gekennzeichnet werden. Da eine abstrakte Methode keinen Körper besitzt, verfügt ihre Definition nicht über geschweifte Klammern und wird daher mit einem Semikolon abgeschlossen.

Eine abstrakte Eigenschaft kann nicht mit dem Schlüsselwort static gekennzeichnet werden.

Implementiert eine abstrakte Klasse eine Schnittstelle, so müssen alle in der Schnittstelle definierten Methoden und Eigenschaften in der abstrakten Klasse implementiert werden. Allerdings kann eine abstrakte Klasse eine solche Methode wie im folgenden Beispiel abstrakt implementieren:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;

namespace GoloRoden.GuideToCSharp
{
    /// <summary>
    /// Provides a foo interface.
    /// </summary>
    public interface IFoo
    {
        /// <summary>
        /// Represents a bar method.
        /// </summary>
        void Bar();
    }

    /// <summary>
    /// Represents an abstract foo class.
    /// </summary>
    public abstract class Foo : IFoo
    {
        /// <summary>
        /// Represents a bar method.
        /// </summary>
        public abstract void Bar();
    }
}

Siehe auch (Referenz)

Siehe auch (Guide)