Inhalt

Eine virtuelle Methode kann einen Implementierungskörper haben. Wenn die Deklaration einer Instanzmethode den virtual-Modifizierer enthält, wird die Methode als virtuelle Methode bezeichnet. Sobald der virtual-Modifizierer verwendet wird, sind keine weiteren static-, abstract- oder override-Modifizierer zulässig.

Code der virtuellen Methode im Simple-Factory-Muster:

//Wird für das Ergebnis nach der Berechnung verwendet public virtual double GetResult() { double result = 0; return result; }

Man erkennt, dass die Klasse eine GetResult()-Methode besitzt. Die GetResult()-Methode enthält einen virtual-Modifizierer, der angibt, dass abgeleitete Klassen der Basisklasse diese Methode überschreiben können. Der Zweck der GetResult()-Methode: die Anweisung"Dies ist eine virtuelle Methode!"auf der Konsole auszugeben.

Die Implementierung einer virtuellen Methode kann durch eine abgeleitete Klasse ersetzt werden. Der Vorgang, die Implementierung einer geerbten virtuellen Methode zu ersetzen, wird als Überschreiben dieser Methode bezeichnet. Bei einem Aufruf einer virtuellen Methode bestimmt der Laufzeittyp der an dem Aufruf beteiligten Instanz, welche Implementierung der Methode tatsächlich aufgerufen wird.

Der Unterschied zwischen abstrakten Methoden und virtuellen Methoden

  • 1. Virtuelle Methoden müssen einen Implementierungsteil besitzen; abstrakte Methoden stellen keinen Implementierungsteil bereit. Eine abstrakte Methode ist eine Methode, die abgeleitete Klassen dazu zwingt, sie zu überschreiben; andernfalls kann die abgeleitete Klasse nicht instanziiert werden.
  • 2. Abstrakte Methoden können nur in abstrakten Klassen deklariert werden; bei virtuellen Methoden ist das nicht der Fall. Wenn eine Klasse eine abstrakte Methode enthält, dann ist die Klasse ebenfalls abstrakt, und sie muss auch als abstrakt deklariert werden.
  • 3. Abstrakte Methoden müssen in abgeleiteten Klassen überschrieben werden, was Schnittstellen ähnelt. Virtuelle Methoden müssen in abgeleiteten Klassen nicht überschrieben werden.

Einfach ausgedrückt müssen abstrakte Methoden von Unterklassen implementiert werden. Virtuelle Methoden sind bereits implementiert und können von Unterklassen überschrieben werden oder auch nicht, je nach Anforderungen.

Sowohl abstrakte Methoden als auch virtuelle Methoden können von abgeleiteten Klassen überschrieben werden.

Zusammenfassung

Im Allgemeinen ist eine virtuelle Methode eine Methode, deren Deklaration den virtual-Modifizierer enthält. Vorerst ist dies die einzige Art, sie zu verstehen. Wenn ich später ein tieferes Verständnis erlange, werde ich mehr hinzufügen. Alle sind eingeladen, ihr Verständnis mitzuteilen.