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.
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();
}
}
|