Unterschied zwischen abstrakter Klasse und Interface in C # Unterschied zwischen

Anonim

aus. Eine abstrakte Klasse ähnelt stark einer Schnittstelle, aber das Konzept ist für die Anfänger von OOP etwas verwirrend. Konzeptionell sieht eine abstrakte Klasse wie eine Schnittstelle aus, natürlich ohne jegliche Implementierung, jedoch haben sie ihren gerechten Anteil an Unterschieden. 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 eine Schnittstelle nur die Definition von Methoden ist, die nur die Mitgliederdeklarationen enthält. Lassen Sie uns die theoretischen Aspekte von beiden im Detail diskutieren.

Was ist eine abstrakte Klasse?

Eine abstrakte Klasse ist eine spezielle Art von Klasse, die als Basis für andere Klassen dient und nicht instanziiert werden kann. Die Implementierungslogik einer abstrakten Klasse wird durch ihre abgeleiteten Klassen bereitgestellt. Um eine Klasse abstrakt zu machen, wird der "abstrakte" Modifikator 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 Funktionalität bereitstellen, die weiter geteilt und von mehreren abgeleiteten Klassen überschrieben werden kann. Es ist sinnvoll, jegliche Art von Code-Duplikation zu vermeiden. Sie sehen sehr ähnlich wie Schnittstellen aus, aber mit zusätzlicher Funktionalität.

Was ist eine Schnittstelle?

Eine Schnittstelle hingegen ist keine Klasse, die nur die Signatur der Funktionalität enthält. Es ist ein Muster ohne Implementierung. Konzeptionell gesehen ist es nur die Definition von Methoden, die nur die Deklaration von Mitgliedern enthält. Es ist eine leere Shell, 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 Member 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 Mehrfachvererbung nicht unterstützt. Andererseits kann eine Schnittstelle die Mehrfachvererbung unterstützen, was bedeutet, dass eine Klasse eine beliebige Anzahl von Vererbungen erben kann.
  2. Definition von Abstrakte Klasse und Interface in C # - Eine abstrakte Klasse ist ein spezieller Typ von Klasse, die eine Definition ohne Implementierung enthalten kann. Die Implementierungslogik wird durch ihre abgeleiteten Klassen bereitgestellt. Es kann sowohl abstrakte als auch nicht-abstrakte Methoden haben.Eine Schnittstelle hingegen ist nur ein Muster, das nichts kann. Technisch ist es nur eine leere Hülle.
  3. Implementierung - Eine abstrakte Klasse kann sowohl die Definition als auch ihre Implementierung enthalten. Es ist eine unvollständige Klasse, die nicht instanziiert werden kann. Eine Schnittstelle kann nur ohne Code die Signatur der Funktionalität haben.
  4. Zugriffsmodifikatoren - Eine abstrakte Klasse kann mehrere Zugriffsmodifizierer wie Subs, Funktionen, Eigenschaften usw. haben, während eine Schnittstelle keine Zugriffsmodifizierer haben darf und alle Methoden implizit als public definiert sein 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. Deklaration - Eine abstrakte Klasse fungiert als Basisklasse für alle anderen Klassen, so dass sie jede Variable deklarieren oder verwenden kann, während eine Schnittstelle keine Variablen deklarieren darf.
  7. Konstruktordeklaration - Während eine abstrakte Klasse eine Konstruktordeklaration haben kann, kann eine Schnittstelle keine Konstruktordeklaration haben.
  8. Core vs Peripheral - Eine abstrakte Klasse wird verwendet, um die Kernidentität einer Klasse zu definieren und kann für Objekte desselben Datentyps verwendet werden. Auf der anderen Seite wird eine Schnittstelle verwendet, um die periphere Fähigkeit einer Klasse zu definieren.
  9. Rigid vs. Supple - Eine abstrakte Klasse ist in Bezug auf die Funktionalität, zumindest aus der Sicht eines Entwicklers, flexibler, während eine Schnittstelle steifer ist.

Abstrakte Klasse vs. Schnittstelle: Tabellenform

Abstrakte Klasse

Schnittstelle

Eine abstrakte Klasse kann alle Zugriffsmodifikatoren für die Elementdeklaration von Funktionen, Subs und Eigenschaften haben. Eine Schnittstelle darf keine Zugriffsmodifizierer für die Member-Deklaration 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 beliebig viele Schnittstellen erben.
Mehrfache Vererbung wird in der abstrakten Klasse nicht unterstützt. Eine Schnittstelle unterstützt möglicherweise mehrere Vererbungen.
Technisch gesehen handelt es sich um eine Klasse, die sowohl die Definition als auch ihre Implementierung enthalten kann oder auch nicht. Eine Schnittstelle kann nur die Signatur von Funktionalität haben, also ist sie im Grunde eine leere Shell.
Eine abstrakte Klasse kann Mitglieder enthalten. Fehler, definierte Methoden und Methoden-Stubs. Eine Schnittstelle kann nur Methoden und Störungen enthalten.
Definiert die Kernidentität einer Klasse und wird verwendet, um Objekte desselben 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 gemeinsamen Verhaltens. Es ist besser, Schnittstellen zu verwenden, wenn sich mehrere Implementierungen nur Methodensignaturen teilen.
Es kann eine Konstruktordeklaration haben. Es kann keine Konstruktordeklaration haben.
Eine abstrakte Klasse hat vordefinierte Felder und Konstanten. Felder können nicht in Schnittstellen definiert werden.
Es kann sowohl abstrakte als auch nicht-abstrakte Methoden haben. 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 in einem technischen Interview. Sie werden wahrscheinlich eine Fülle von Informationen über abstrakte Klassen und Interfaces in jedem C # -Tutorial finden, aber den Unterschied zwischen den beiden zu verstehen ist ziemlich schwierig. Sie können alle Informationen konsolidieren, die Sie finden können und immer noch nicht genug bekommen können. Nun, konzeptionell sind beide die wichtigsten Begriffe in der Programmierung und sind ziemlich gleich, unterscheiden sich jedoch sehr in Bezug auf die Funktionalität. Während eine abstrakte Klasse eine spezielle Art von Klasse ist, die als Basis für andere Klassen dient, ist eine Schnittstelle andererseits nur eine leere Shell mit nur Memberdeklarationen.