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?Es gibt nichts, was man in C# als virtuelle Klasse bezeichnen könnte.
Für Funktionen
- Abstrakte Funktion haben nur Signatur nur, sollte die Antriebsklasse mit Funktionalität überschreiben.
- Die virtuelle Funktion enthält den Teil der Funktionalität, den die Antriebsklasse je nach Anforderung überschreiben kann oder nicht
Sie können nach Ihrem Bedarf entscheiden.
Eine abstrakte Methode hat keine Implementierung und wird in der übergeordneten Klasse deklariert. Die untergeordnete Klasse ist für die Implementierung dieser Methode verantwortlich.
Eine virtuelle Methode sollte eine Implementierung in der Elternklasse haben, und es erleichtert der Kindklasse die Entscheidung, ob sie die Implementierung der Elternklasse verwenden oder eine neue Implementierung für sich selbst für diese Methode in der Kindklasse haben möchte.
Eine abstrakte Funktion oder Methode ist ein öffentlicher "Operationsname", der von einer Klasse offengelegt wird. Sein Ziel ist es, zusammen mit abstrakten Klassen, in erster Linie eine Form der Einschränkung im Objektdesign gegen die Struktur zu bieten, die ein Objekt implementieren muss.
Die Klassen, die von der abstrakten Klasse erben, müssen diese Methode implementieren, da Compiler im Allgemeinen Fehler auslösen, wenn sie dies nicht tun.
Die Verwendung von abstrakten Klassen und Methoden ist vor allem wichtig, um zu vermeiden, dass durch die Fokussierung auf Implementierungsdetails beim Entwurf von Klassen die Klassenstruktur zu sehr mit den Implementierungen verbunden ist, wodurch Abhängigkeiten und Kopplungen zwischen Klassen entstehen, die untereinander zusammenarbeiten.
Eine virtuelle Funktion oder Methode ist einfach eine Methode, die ein öffentliches Verhalten einer Klasse modelliert, die wir aber frei lassen können, um sie in der Vererbungskette zu ändern, weil wir denken, dass untergeordnete Klassen einige spezifische Erweiterungen für dieses Verhalten implementieren müssen könnten.
Beide stellen eine Form der Polymorphismus im Paradigma der Objektorientierung.
Wir können abstrakte Methoden und virtuelle Funktionen zusammen verwenden, um ein gutes Vererbungsmodell zu unterstützen.
Wir entwerfen eine gute abstrakte Struktur der Hauptobjekte unserer Lösung, dann erstellen wir Basisimplementierungen, indem wir diejenigen ausfindig machen, die anfälliger für weitere Spezialisierungen sind, und wir machen diese zu Virtuellen, schließlich spezialisieren wir unsere Basisimplementierungen, wobei wir eventuell geerbte Virtuelle "überschreiben".