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?
Antworten
Zu viele Anzeigen?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.
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();
}
- Nur
abstract
Klassen können habenabstract
Mitglieder. - A nicht
abstract
Klasse, die von einerabstract
Klasse なければならないoverride
seineabstract
Mitglieder. - Eine
abstract
Mitglied ist implizitvirtual
. - Eine
abstract
Mitglied kann keine Implementierung anbieten (abstract
heißtpure virtual
in einigen Sprachen).
Abstrakte Funktion:
- Sie kann nur innerhalb einer abstrakten Klasse deklariert werden.
- Es enthält nur Methodendeklaration und nicht die Implementierung in der abstrakten Klasse.
- Sie muss in einer abgeleiteten Klasse überschrieben werden.
Virtuelle Funktion:
- Sie kann sowohl in abstrakten als auch in nicht abstrakten Klassen deklariert werden.
- Sie enthält die Implementierung von Methoden.
- Sie kann außer Kraft gesetzt werden.
- See previous answers
- Weitere Antworten anzeigen