1723 Stimmen

Was ist der Unterschied zwischen einer abstrakten Methode und einer virtuellen Methode?

Was ist der Unterschied zwischen einer abstrakten Methode und einer virtuellen Methode? In welchen Fällen ist es empfehlenswert, abstrakte oder virtuelle Methoden zu verwenden? Welcher Ansatz ist der beste?

2918voto

BFree Punkte 100035

Eine abstrakte Funktion kann keine Funktionalität haben. Sie sagen im Grunde, dass jede untergeordnete Klasse ihre eigene Version dieser Methode bereitstellen MUSS, dass sie aber zu allgemein ist, um sie in der übergeordneten Klasse zu implementieren.

Eine virtuelle Funktion bedeutet im Grunde, dass hier die Funktionalität ist, die für die Kindklasse gut genug sein kann oder auch nicht. Also, wenn es gut genug ist, verwenden Sie diese Methode, wenn nicht, dann überschreiben Sie mich, und bieten Sie Ihre eigene Funktionalität.

330voto

JoshBerke Punkte 64214

Eine abstrakte Funktion ist nicht implementiert und kann nur in einer abstrakten Klasse deklariert werden. Dies zwingt die abgeleitete Klasse dazu, eine Implementierung bereitzustellen.

Eine virtuelle Funktion bietet eine Standardimplementierung und kann sowohl in einer abstrakten Klasse als auch in einer nicht-abstrakten Klasse vorhanden sein.

So zum Beispiel:

public abstract class myBase
{
    //If you derive from this class you must implement this method. notice we have no method body here either
    public abstract void YouMustImplement();

    //If you derive from this class you can change the behavior but are not required to
    public virtual void YouCanOverride()
    { 
    }
}

public class MyBase
{
   //This will not compile because you cannot have an abstract method in a non-abstract class
    public abstract void YouMustImplement();
}

88voto

mmx Punkte 400975
  1. Nur abstract Klassen können haben abstract Mitglieder.
  2. A nicht abstract Klasse, die von einer abstract Klasse なければならない override seine abstract Mitglieder.
  3. Eine abstract Mitglied ist implizit virtual .
  4. Eine abstract Mitglied kann keine Implementierung anbieten ( abstract heißt pure virtual in einigen Sprachen).

71voto

Rinat Abdullin Punkte 22138

Sie müssen eine abstrakte Funktion immer außer Kraft setzen.

So:

  • Abstrakte Funktionen - wenn der Erbe muss seine eigene Implementierung bereitstellen
  • Virtuell - wenn es ist Sache des Erben zu entscheiden

41voto

Lexnim Punkte 390

Abstrakte Funktion:

  1. Sie kann nur innerhalb einer abstrakten Klasse deklariert werden.
  2. Es enthält nur Methodendeklaration und nicht die Implementierung in der abstrakten Klasse.
  3. Sie muss in einer abgeleiteten Klasse überschrieben werden.

Virtuelle Funktion:

  1. Sie kann sowohl in abstrakten als auch in nicht abstrakten Klassen deklariert werden.
  2. Sie enthält die Implementierung von Methoden.
  3. Sie kann außer Kraft gesetzt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X