Wann sollten Sie in C # Schnittstellen und wann abstrakte Klassen verwenden? Was kann der entscheidende Faktor sein?
Die Vorteile einer abstrakten Klasse sind:
Schnittstellen sind lediglich Datenübermittlungsverträge und weisen diese Merkmale nicht auf. Sie sind jedoch in der Regel flexibler, da ein Typ nur von einer Klasse abgeleitet werden kann, aber eine beliebige Anzahl von Schnittstellen implementieren kann.
Abstrakte Klassen und Interfaces sind semantisch unterschiedlich, obwohl sich ihre Verwendung überschneiden kann.
Eine abstrakte Klasse wird im Allgemeinen als Grundlage für die Erstellung ähnlicher Klassen verwendet. Die für die Klassen übliche Implementierung kann in der abstrakten Klasse erfolgen.
Eine Schnittstelle wird im Allgemeinen verwendet, um eine Fähigkeit für Klassen anzugeben, bei denen die Klassen nicht sehr ähnlich sein müssen.
Da es keine Mehrfachvererbung gibt, sollten Sie eine Schnittstelle verwenden, wenn Sie möchten, dass eine Klasse Ihre Schnittstelle/abstrakte Klasse implementieren/erben kann, aber von einer anderen Basisklasse erbt.
Die eigentliche Frage ist, ob Schnittstellen oder Basisklassen verwendet werden sollen. Dies wurde bereits früher behandelt.
In C # ist eine abstrakte Klasse (eine mit dem Schlüsselwort "abstract" gekennzeichnete) einfach eine Klasse, aus der Sie keine Objekte instanziieren können. Dies dient einem anderen Zweck als der einfachen Unterscheidung zwischen Basisklassen und Schnittstellen.