Unterschied zwischen abstrakter Klasse und Schnittstelle in C# (mit Tabelle)

Wenn Sie Anwendungen entwerfen oder eine Programmierkarriere beginnen, ist es notwendig, den Unterschied zwischen abstrakter Klasse und Schnittstelle in C# zu kennen. Sowohl abstrakte Klasse als auch Schnittstelle werden verwendet, um eine Abstraktion zu erreichen, bei der man die abstrakten Methoden verstehen kann. Obwohl beide nicht gleichzeitig verwendet werden können.

Abstrakte Klassen und Schnittstellen mögen in einigen Punkten ähnlich erscheinen, aber es gibt wichtige Unterschiede, die dazu beitragen, festzustellen, welche die beste Wahl für jemanden ist, um ein bestimmtes Programmierziel zu erreichen.

Man sollte niemals beabsichtigen, eine abstrakte Klasse direkt zu verwenden. Diese Klasse muss mindestens eine abstrakte Methode haben. Und es wird durch das Schlüsselwort oder den Modifikator abstract in der Definition von class gekennzeichnet. Andererseits erlaubt eine Schnittstelle nur jemandem, Funktionalität zu definieren. Es kann nicht umgesetzt werden. Obwohl eine Klasse nur eine abstrakte Klasse entwickeln kann, kann sie auch verschiedene Schnittstellen nutzen.

Abstrakte Klasse gegen Schnittstelle in C#

Das Unterschied zwischen abstrakter Klasse und Schnittstelle in C# ist, dass die Hauptfunktion der abstrakten Klasse darin besteht, die wahre Identität einer Klasse zu erklären, während die Hauptfunktion einer Schnittstelle darin besteht, die äußeren Möglichkeiten einer Klasse zu erklären. Eine vollständige Abstraktion wird von einer abstrakten Klasse nicht bereitgestellt, wohingegen eine Schnittstelle eine vollständige Abstraktion bereitstellen kann.

Mehrfachvererbung ist in einer abstrakten Klasse nicht möglich, während eine Schnittstelle Mehrfachvererbung möglich machen kann.

Vergleichstabelle zwischen abstrakter Klasse und Schnittstelle in C#

Parameter des VergleichsAbstrakte KlasseSchnittstelle in C#
FunktionalitätDurch Hinzufügen einer neuen Methode zu einer abstrakten Klasse können Sie die Standardimplementierung bereitstellen, sodass der gesamte aktuelle Code ordnungsgemäß funktioniertDurch Hinzufügen einer neuen Methode zu einer Schnittstelle können alle Implementierungen der Schnittstelle aufgespürt und die Implementierung für die aktuelle Methode definiert werden
Verschiedene VererbungMöglicherweise wird nur eine abstrakte Klasse von einer Klasse geerbtEine Klasse kann mehrere Schnittstellen erben
Was enthalten sie?Die abstrakte Klasse enthält Datenelemente und KonstruktorenEine Schnittstelle in C# enthält keine Datenelemente und Konstruktoren
Zur Verfügung stellenEine abstrakte Klasse kann vollständigen Standardcode und / oder die Details bereitstellen, die überschrieben werden sollenEine Schnittstelle in C# kann keinen Code bereitstellen, sondern nur die Signatur
BewegungsgeschwindigkeitEine abstrakte Klasse ist schnell, wenn es um Geschwindigkeit gehtEine Schnittstelle in C# benötigt mehr Zeit, um die reale Methode in den entsprechenden Klassen abzurufen

Was ist eine abstrakte Klasse in C#?

Eine abstrakte Klasse ist etwas, das nur als Basisklasse anderer Klassen gedacht sein kann. Sie sind Klassen mit einer oder mehreren abstrakten Methoden. Eine abstrakte Methode wird als Methode bezeichnet, die angekündigt wird, aber keine Implementierung enthält.

Um eine Klasse zu erstellen, müssen wir einen 'abstrakten' Modifikator verwenden. Dieser Modifikator weist darauf hin, dass möglicherweise einige fehlende Implementierungen vorhanden sind, die in der daraus entnommenen Klasse ausgeführt werden müssen. Sowohl abstrakte als auch nicht abstrakte Member können in einer abstrakten Klasse enthalten sein.

Diese abstrakte Klasse sollte mindestens eine abstrakte Methode haben, die bereits oben diskutiert wurde. Ohne die Methode können wir diese Klasse nicht als „abstrakt“ deklarieren.

Manchmal werden abstrakte Klassen möglicherweise nicht instanziiert und benötigen Unterklassen, um Implementierungen für die abstrakten Methoden bereitzustellen. Wenn wir eine abstrakte Klasse erstellen, erstellen wir eine Basisklasse, die eine oder mehrere abgeschlossene Methoden enthalten kann, aber wir finden mindestens eine oder mehrere Methoden, die nicht abgeschlossen und als abstrakt deklariert sind.

Bleiben alle Methoden einer abstrakten Klasse unvollendet, dann ist sie wie eine Schnittstelle. Der eigentliche Zweck einer abstrakten Klasse besteht darin, eine Definition einer Basisklasse für die Funktionsweise eines Satzes abgeleiteter Klassen zu liefern und dann die Programmierer die Implementierung in die abgeleiteten Klassen füllen zu lassen.

Wir können auch sagen, dass der Zweck einer abstrakten Klasse darin besteht, eine Basisklassendefinition bereitzustellen.

Was ist die Schnittstelle in C#?

Andererseits ist eine Schnittstelle keine Klasse, die nur einen Hinweis auf die Funktionalität hat. Wir können es ein Muster ohne Implementierung nennen. Theoretisch ist es nur eine Definition von Methoden, die die Deklaration von Membern hat.

Wir können es uns als leere Shell vorstellen, die nicht die Implementierung ihrer Member enthält. Die Schnittstelle ist wie eine abstrakte Basisklasse, die nur abstrakte Member wie Methoden, Indexer, Ereignisse, Eigenschaften usw.

Eine direkte Instanziierung ist nicht möglich und seine Member können von jeder Klasse implementiert werden. Auch können verschiedene Schnittstellen von einer Klasse implementiert werden, dennoch kann eine Klasse nur eine einzige Klasse erhalten. Mit anderen Worten, wir können sagen, dass eine Schnittstelle nur die Deklaration von Membern enthält und nicht die Implementierung dieser Member.

Eine Klasse implementiert die Schnittstelle und muss die Definition der in der Schnittstelle angegebenen Methoden liefern. Das bedeutet, dass eine Schnittstelle eine Standardstruktur enthält, der die abgeleitete Klasse folgen muss.

Hauptunterschiede zwischen abstrakter Klasse und Schnittstelle in C#

  1. Eine abstrakte Klasse ist als eine bestimmte Art von Klasse bekannt, die eine Erklärung ohne Implementierung enthalten kann. Andererseits ist eine Schnittstelle nur ein Muster, das zu nichts fähig ist. Technisch gesehen ist es also nur eine Hülle, die leer ist.
  2. Eine Klasse kann nur eine abstrakte Klasse verwenden, daher wird mehr als eine Vererbung nicht unterstützt. Andererseits kann eine Vererbung verschiedene Vererbungen unterstützen, was bedeutet, dass eine Klasse eine beliebige Anzahl von Vererbungen erben kann.
  3. Eine abstrakte Klasse kann einige Zugriffsmodifikatoren wie Subs, Funktionen, Eigenschaften usw. enthalten. Während eine Schnittstelle keine Zugriffsmodifikatoren enthalten darf, müssen alle Methoden zwangsläufig als öffentlich definiert werden.
  4. Eine abstrakte Klasse fungiert in der Regel als Basisklasse für alle anderen Klassen, sodass sie beliebige Variablen deklarieren oder verwenden kann, während eine Schnittstelle keine deklarieren darf.
  5. Eine abstrakte Klasse verwendet in der Regel sich selbst, um die Hauptidentität einer Klasse zu definieren, und kann für Objekte mit einem ähnlichen Datumstyp verwendet werden. Eine Schnittstelle wird verwendet, um die periphere Fähigkeit einer Klasse zu definieren.

Häufig gestellte Fragen (FAQ) zu Abstract Class und Interface in C#

Was ist die Verwendung der abstrakten Klasse in C#?

C# ist eine objektorientierte Allzweck-Programmiersprache. Es ist von Microsoft. Das Hauptziel von C# ist es, die Rechenleistung von C ++ mit der Programmierfreundlichkeit von Virtual Basic zu nutzen.
Es basiert hauptsächlich auf C ++ und enthält ähnliche Funktionen wie Java.

Eine abstrakte Klasse ist eine Möglichkeit zur Abstraktion in C# und kann nicht direkt instanziiert werden. Die Funktion der abstrakten Klasse besteht darin, eine Funktionalität oder ein gemeinsames Verhalten zu erstellen, das Unterklassen erben, implementieren oder überschreiben können.

Es liefert im Grunde genommen einen Entwurf für die abgeleiteten Klassen und gibt Anweisungen, was von abgeleiteten Klassen implementiert werden soll, wenn eine abstrakte Klasse von ihnen geerbt wird.

Was ist die Schnittstelle in C# und warum wird sie verwendet?

Eine Schnittstelle in C# kann als Typdefinition wie eine Klasse definiert werden. Aber es stellt nur Deklarationen bereit und wird von Klassen und Strukturen geerbt.

Es wird mit einer Klasse verwendet, um einen Vertrag zu definieren (eine Vereinbarung darüber, was die Klasse einer Anwendung bereitstellt). Es deklariert nur die Methoden und verschiedene Eigenschaften und eine Klasse bestimmt, was die Methode tatsächlich tut.

Es kann nicht als Objekt instanziiert werden und wird nur als Sammlung von Methoden und Eigenschaftsdeklarationen verwendet. Es definiert, welche Operationen von einer Klasse ausgeführt werden können oder werden.

Was ist Polymorphismus in C#?

Polymorphismus wird normalerweise als eine Schnittstelle und mehrere Funktionen ausgedrückt. Polymorphismus in C# bedeutet, die Fähigkeit zu bieten, mehrere Formen anzunehmen. Nach Kapselung und Vererbung ist es ein weiteres Säulenkonzept der objektorientierten Programmierung. C# bietet die Möglichkeit, Klassen verschiedene Methoden zu implementieren, die normalerweise mit dem gleichen Namen aufgerufen werden.

Es gibt zwei Arten von Polymorphismen in C#:

  1. Kompilierungszeitpolymorphismus - Es bedeutet, mehrere Methoden mit unterschiedlichen Parametern, aber demselben Namen zu definieren. Es ermöglicht uns, denselben Methodennamen zu verwenden, um verschiedene Aufgaben nur durch Übergabe verschiedener Parameter auszuführen.
  2. Laufzeitpolymorphismus - Dies bedeutet, dass eine ähnliche Funktion in der abgeleiteten Klasse erstellt wird, um eine Basisklassenmethode zu überschreiben. In dieser Methode können wir eine Methode mit demselben Namen und denselben Parametern erstellen, um verschiedene Aufgaben auszuführen.

Fazit

Den Unterschied zwischen den beiden zu verstehen, ist eine ziemlich schwierige Aufgabe. Wir können alle Informationen kombinieren, die wir finden können, und trotzdem wird es nicht ausreichen. Theoretisch sind beide die wichtigsten Begriffe in der Programmierung und ziemlich ähnlich, unterscheiden sich jedoch in Bezug auf die Funktionalität stark.

Während eine abstrakte Klasse ein bestimmter Klassentyp ist, der als Basis für andere Klassen dient, ist eine Schnittstelle nur eine leere Shell mit nur Elementdeklarationen.

Verweise

  1. https://csharp.net-tutorials.com/classes/abstract-classes/
  2. https://dl.acm.org/doi/abs/10.1145/512035.512041
x
2D vs 3D