C#: Virtuelle und abstrakte Methoden im Überblick

C#: Virtuelle und abstrakte Methoden im Überblick

Hast du dich jemals gefragt, was der Unterschied zwischen virtuellen und abstrakten Methoden in C# ist? In diesem Artikel werde ich dir einen Einblick in beide Methodentypen geben und erklären, wann du sie verwenden solltest.

Virtuelle Methoden

Eine virtuelle Methode kann in der Basisklasse deklariert werden, indem du das Schlüsselwort “virtual” in der Methodensignatur verwendest. Virtuelle Methoden ermöglichen es Unterklassen, die Methode zu überschreiben und somit Laufzeitpolymorphismus oder Spätbindung zu implementieren. Beachte jedoch, dass virtuelle oder abstrakte Methoden einer Klasse nicht als privat deklariert werden können.

Um dir ein besseres Verständnis zu geben, schauen wir uns einen Code-Schnipsel an:

public class Base
{
    public virtual void Test()
    {
        Console.WriteLine("Dies ist die Basisklassen-Version der virtuellen Methode");
    }
}

public class Derived : Base
{
    public override void Test()
    {
        Console.WriteLine("Dies ist die abgeleitete Version der virtuellen Methode");
    }
}

In diesem Beispiel wird die Methode Test() in der Basisklasse als virtuell deklariert und in der abgeleiteten Klasse überschrieben. Beachte, wie das Schlüsselwort “virtual” verwendet wird, um die Methode in der Basisklasse als virtuell zu markieren. Beim Überschreiben der virtuellen Methode in der abgeleiteten Klasse wird das Schlüsselwort “virtual” jedoch nicht benötigt.

Nun schauen wir uns den nächsten Code-Schnipsel an, der zeigt, wie virtuelle Methoden aufgerufen werden:

class Program
{
    static void Main()
    {
        Base baseObj1 = new Base();
        baseObj1.Test();

        Base baseObj2 = new Derived();
        baseObj2.Test();
    }
}

In diesem Beispiel werden zwei Instanzen der Basisklasse erstellt – baseObj1 und baseObj2. Bei dem ersten Aufruf der virtuellen Methode wird die Meldung “Dies ist die Basisklassen-Version der virtuellen Methode” in der Konsole angezeigt. Beim zweiten Aufruf wird die Meldung “Dies ist die abgeleitete Version der virtuellen Methode” angezeigt. Warum gibt es diesen Unterschied?

LESEN  Laufbänder: Hol dir Fitness nach Hause!

Der Unterschied liegt in der Art und Weise, wie der Typ des Referenzobjekts betrachtet wird. In Fall eins wird der Basistyp berücksichtigt und daher die Methode der Basisklasse aufgerufen. In Fall zwei wird der Kontext des Referenzobjekts berücksichtigt und daher die Methode der abgeleiteten Klasse aufgerufen.

Abstrakte Methoden

Abstrakte Methoden sind solche, die in der Basisklasse als abstrakt deklariert werden und keine Implementierungen haben dürfen. Du kannst abstrakte Methoden verwenden, wenn du möchtest, dass die Methode in den abgeleiteten Klassen zwangsweise überschrieben wird. Dies wird bereits zur Compile-Zeit vom Compiler überprüft. Wenn du eine Methode in einer Basisklasse mit dem Schlüsselwort “abstract” deklarierst, müssen die abgeleiteten Klassen diese Methode implementieren. Andernfalls gibt der Compiler einen Fehler aus. Es sollte beachtet werden, dass abstrakte Methoden nur in abstrakten Klassen deklariert werden können.

Ein typischer Anwendungsfall für eine abstrakte Methode ist das Erzwingen der Überschreibung der ToString() oder Equals() Methoden. Schauen wir uns den folgenden Code-Schnipsel an, der zeigt, wie abstrakte Methoden in einer abstrakten Basisklasse namens EntityBase deklariert werden:

public abstract class EntityBase
{
    public abstract override string ToString();
    public abstract override bool Equals(object obj);
}

public class Customer : EntityBase
{
    // Implementierung der abstrakten Methoden
}

Die Klasse EntityBase ist der Basistyp für alle Entitäten – die Klasse Customer erweitert diese Klasse und stellt Implementierungen für die abstrakten Methoden bereit. Im Wesentlichen sollte jede abgeleitete Klasse eine eigene Implementierung der ToString() und Equals() Methoden bereitstellen. In der Basisklasse wird keine Standardimplementierung für diese Methoden benötigt und deshalb werden sie als abstrakt markiert. Die Methodenüberschreibung wird also erzwungen, indem die Methode in der abstrakten Basisklasse als abstrakt deklariert wird.

LESEN  Alles, was du über die Livestreams auf sportschau.de wissen musst

Das war ein Überblick über virtuelle und abstrakte Methoden in C#. Ich hoffe, dass du jetzt ein besseres Verständnis für die Verwendung dieser beiden Methodentypen hast. Viel Spaß beim Programmieren!