Unterschied zwischen abstrakter Klasse und Schnittstelle in C #

Eine abstrakte Klasse ähnelt einer Oberfläche, aber das Konzept ist für Anfänger von OOP etwas verwirrend. Konzeptionell sieht eine abstrakte Klasse wie eine Schnittstelle aus, natürlich ohne Implementierung, jedoch haben sie durchaus unterschiedliche Unterschiede. Während eine abstrakte Klasse teilweise oder vollständig implementiert werden kann, muss eine Schnittstelle vollständig implementiert werden. Nun, der bemerkenswerteste Unterschied zwischen den beiden ist, dass eine abstrakte Klasse eine Standardimplementierung haben kann, während ein Interface nur die Definition von Methoden ist, die nur die Memberdeklarationen enthält. Lassen Sie uns die theoretischen Aspekte von beiden ausführlich besprechen.

Was ist eine abstrakte Klasse??

Eine abstrakte Klasse ist eine spezielle Klasse, die als Basis für andere Klassen dient und nicht instanziiert werden kann. Die Implementierungslogik einer abstrakten Klasse wird von ihren abgeleiteten Klassen bereitgestellt. Um eine Klasse abstrakt zu machen, wird der Modifikator "abstract" verwendet, was bedeutet, dass einige fehlende Implementierungen in der davon abgeleiteten Klasse implementiert werden müssen. Es enthält sowohl abstrakte als auch nicht abstrakte Mitglieder. Eine abstrakte Klasse soll grundlegende Funktionen bereitstellen, die von mehreren abgeleiteten Klassen gemeinsam genutzt und überschrieben werden können. Es ist nützlich, jegliche Art von Code-Duplizierung zu vermeiden. Sie sehen sehr nach Schnittstellen aus, haben jedoch zusätzliche Funktionen.

Was ist eine Schnittstelle??

Eine Schnittstelle dagegen ist keine Klasse, die nur die Signatur der Funktionalität enthält. Es ist ein Muster ohne Implementierung. Konzeptionell ist es nur die Definition von Methoden, die nur die Deklaration von Mitgliedern enthält. Es ist eine leere Hülle, die die Implementierung ihrer Mitglieder nicht enthält. Es ist wie eine abstrakte Basisklasse, die nur abstrakte Elemente wie Methoden, Ereignisse, Indexer, Eigenschaften usw. enthält. Sie kann nicht direkt instanziiert werden und ihre Mitglieder können von jeder Klasse implementiert werden. Darüber hinaus können mehrere Schnittstellen von einer Klasse implementiert werden, eine Klasse kann jedoch nur eine einzelne Klasse erben.

Abstrakte Klasse vs. Schnittstelle: Unterschied zwischen abstrakter Klasse und Schnittstelle in C #

  1. Mehrfachvererbung - Eine Klasse kann nur eine abstrakte Klasse verwenden. Daher wird die Mehrfachvererbung nicht unterstützt. Eine Schnittstelle hingegen kann die Mehrfachvererbung unterstützen, dh eine Klasse kann eine beliebige Anzahl von Vererbungen erben.
  2. Definition  von Abstrakte Klasse und Schnittstelle in C #- Eine abstrakte Klasse ist ein spezieller Klassentyp, der Definition ohne Implementierung enthalten kann. Die Implementierungslogik wird von ihren abgeleiteten Klassen bereitgestellt. Es kann sowohl abstrakte als auch nicht abstrakte Methoden haben. Eine Schnittstelle dagegen ist nur ein Muster, das nichts kann. Technisch gesehen ist es nur eine leere Hülle.
  3. Implementierung - Eine abstrakte Klasse kann sowohl Definition als auch Implementierung enthalten. Es ist eine unvollständige Klasse, die nicht instanziiert werden kann. Eine Schnittstelle kann nur die Signatur der Funktionalität ohne Code haben.
  4.  Zugriffsmodifizierer - Eine abstrakte Klasse kann mehrere Zugriffsmodifizierer wie Subs, Funktionen, Eigenschaften usw. haben, während eine Schnittstelle keine Zugriffsmodifikatoren haben darf und alle Methoden implizit als public definiert werden müssen.
  5. Homogenität - Eine abstrakte Klasse wird für Implementierungen desselben Typs, Verhaltens und Status verwendet, während eine Schnittstelle für Implementierungen verwendet wird, die nur Methodensignaturen verwenden.
  6. Erklärung - Eine abstrakte Klasse fungiert als Basisklasse für alle anderen Klassen, sodass sie beliebige Variablen deklarieren oder verwenden kann, während ein Interface keine Variablen deklarieren darf.
  7. Konstruktorerklärung - Während eine abstrakte Klasse eine Konstruktordeklaration haben kann, kann eine Schnittstelle keine Konstruktordeklaration haben.
  8. Core vs. Peripherie - Eine abstrakte Klasse wird zur Definition der Kernidentität einer Klasse verwendet und kann für Objekte desselben Datentyps verwendet werden. Eine Schnittstelle hingegen wird verwendet, um die periphere Fähigkeit einer Klasse zu definieren.
  9. Starr vs. geschmeidig - Eine abstrakte Klasse ist in Bezug auf die Funktionalität flexibler, zumindest aus der Sicht eines Entwicklers, während eine Schnittstelle starrer ist.

Abstrakte Klasse vs. Schnittstelle: Tabellenform

Abstrakte Klasse

Schnittstelle

Eine abstrakte Klasse kann alle Zugriffsmodifizierer für die Memberdeklaration von Funktionen, Subs und Eigenschaften haben. Ein Interface darf keine Zugriffsmodifizierer für die Memberdeklaration von Funktionen, Subs, Properties usw. haben. Alle Member werden als implizit public angenommen.
Eine Klasse kann höchstens eine abstrakte Klasse verwenden. Eine Klasse kann eine beliebige Anzahl von Schnittstellen erben.
Mehrfachvererbung wird in abstrakten Klassen nicht unterstützt. Eine Schnittstelle kann Mehrfachvererbung unterstützen.
Technisch handelt es sich dabei um eine Klasse, die sowohl Definition als auch Implementierung enthalten kann oder nicht. Eine Schnittstelle kann nur die Signatur der Funktionalität haben, also im Grunde genommen eine leere Shell.
Eine abstrakte Klasse kann Mitglieder enthalten. consts, definierte Methoden und Methodenstubs. Eine Schnittstelle kann nur Methoden und Konstanten enthalten.
Sie definiert die Kernidentität einer Klasse und wird verwendet, um Objekte des gleichen Datentyps zu beschreiben. Es wird verwendet, um die peripheren Fähigkeiten einer Klasse zu beschreiben.
Mitglieder einer abstrakten Klasse können nicht statisch sein, es sei denn, es handelt sich um ein vollständiges Mitglied. Mitglieder einer Schnittstelle können nicht statisch sein.
Es ist ideal für Implementierungen der gleichen Art und des gleichen Verhaltens. Es ist besser, Schnittstellen zu verwenden, wenn mehrere Implementierungen nur Methodensignaturen verwenden.
Es kann Konstruktordeklaration haben. Es kann keine Konstruktordeklaration haben.
Eine abstrakte Klasse hat vordefinierte Felder und Einengungen. Felder können nicht in Schnittstellen definiert werden.
Es kann sowohl abstrakte als auch nicht abstrakte Methoden geben. Es kann nur abstrakte Methoden haben.

Zusammenfassung

Was ist der Unterschied zwischen einer abstrakten Klasse und einer Schnittstelle? Dies ist wahrscheinlich eine der häufigsten Fragen, die in einem technischen Interview gestellt werden. In jedem C # -Tutorial finden Sie wahrscheinlich eine Fülle von Informationen zu abstrakten Klassen und Schnittstellen. Das Verständnis des Unterschieds zwischen beiden ist jedoch ziemlich schwierig. Sie können alle Informationen konsolidieren, die Sie finden können und trotzdem nicht genug bekommen. Nun, konzeptionell sind beide die wichtigsten Begriffe in der Programmierung und sind ziemlich gleich, unterscheiden sich jedoch in der Funktionalität stark. Während eine abstrakte Klasse ein spezieller Klassentyp ist, der als Basis für andere Klassen dient, ist eine Schnittstelle dagegen nur eine leere Shell mit nur Memberdeklarationen.