Was ist eine abstrakte Klasse in C #?

Das Wort abstrakt bedeutet ein Gedanke oder eine Idee, die keine eigene physische Form hat, sondern als Grundlage für andere Dinge dient. Das gleiche ist das Konzept hinter der abstrakten Klasse. In diesem Artikel werden abstrakte Klassen in C # behandelt. Eine abstrakte Klasse ist eine spezielle Klasse in C #, die nicht instanziiert werden kann, dh Sie können keine Objekte einer abstrakten Klasse erstellen. Der Zweck einer abstrakten Klasse besteht darin, eine Skelettstruktur bereitzustellen, von der andere Klassen abgeleitet werden können. Abstrakte Klassen haben keine eigene Implementierung. Sie verlangen von den Entwicklern und Programmierern, dass sie sich von der abstrakten Klasse ableiten und auf der Skelettstruktur aufbauen, dh ihre Implementierung schreiben. Eine abstrakte Klasse kann auch abstrakte Methodendeklarationen enthalten. Auch diese Methoden können keine Definitionen haben.

Die Syntax zum Deklarieren von abstrakten Klassen und Methoden umfasst das Platzieren des Schlüsselworts abstract vor der Deklaration. So einfach ist das.

Syntax:

abstract class ClassName
(
public abstract void MethodName();
)

Denken Sie daran, abstrakte Methoden können keine Definitionen haben. Daher enden die abstrakten Methodendeklarationen mit einem Semikolon. Sie können nur deklariert werden. Die Definitionen müssen in abgeleiteten nicht abstrakten Klassen angegeben werden.

Wie funktioniert die abstrakte Klasse in C #?

Das Schlüsselwort abstract weist den Compiler an, dass die Klasse eine Basisklassen-Skelettstruktur ist, die in abgeleiteten Klassen implementiert werden soll. Wenn der Compiler eine Klasse findet, die die abstrakte Basisklasse ableitet, prüft er, ob alle abstrakten Methoden und Eigenschaften überschrieben und in der abgeleiteten Klasse implementiert sind.

Abstrakte Klasse gegen Schnittstelle

Jetzt fragen Sie sich vielleicht, was das alles ist und welche Funktionen die Benutzeroberfläche hat. Wie unterscheidet sich eine abstrakte Klasse von einer Schnittstelle?

Lassen Sie uns dies anhand eines Beispiels verstehen. Nehmen wir an, wir betreiben einen Verlag und haben einige Redakteure beauftragt, Kolumnen für unser Magazin zu schreiben. Nehmen wir an, sie sind Experten in verschiedenen Genres, schreiben Artikel, die an einem bestimmten Wochentag veröffentlicht werden sollen, und werden alle zum gleichen Gehalt eingestellt.

Definieren wir die abstrakte Mitarbeiterklasse für unsere Redakteure.

Code:

abstract class EmployeeEditors
(
public abstract void Genre();
public abstract string PublishDay();
public int Payment()
(
Console.Write(“Monthly salary is (0)$.”, 1000);
)
)

Wir können die Zahlungsmethode problemlos implementieren, da wir wissen, dass sie für alle gleich ist. Die anderen beiden Methoden wurden als abstrakt deklariert, um von der abgeleiteten Klasse implementiert zu werden. Man könnte für jeden Editor, der aus der abstrakten Klasse stammt, eine normale Klasse deklarieren und dann die abstrakten Methoden implementieren, um die Genres und Tage zu definieren. Nehmen wir nun an, dass auch das Gehalt der einzelnen Redakteure unterschiedlich ist. Eine Möglichkeit, unseren Code zu ändern, besteht darin, die Zahlungsmethode als abstrakt zu deklarieren. Die andere Möglichkeit wäre, den gesamten EmployeeEditor als Schnittstelle zu deklarieren und das Erben von Klassen frei zu machen.

Public interface EmployeeEditors
(
public abstract void Genre();
public abstract string PublishDay();
public abstract int Payment();
)

Eine abstrakte Klasse ist also eine Basisklasse, auf der andere Klassen aufbauen können. Während eine Schnittstelle eine Blaupause ist, auf die andere Klassen verweisen und die von Grund auf neu erstellt werden können.

Regeln der abstrakten Klasse in C #

Bei der Arbeit mit abstrakten Klassen gelten bestimmte Regeln.

  • Da abstrakte Klassen unvollständige Methodendefinitionen haben, können sie nicht instanziiert werden. Jeder Versuch, ein Objekt einer abstrakten Klasse zu erstellen, würde zu einem Fehler beim Kompilieren führen.
  • Abstrakte Methoden können nicht in abstrakten Klassen definiert, sondern nur deklariert werden. Der Methodenkörper muss in abgeleiteten Klassen definiert sein.
  • Abgeleitete Klassen müssen alle abstrakten Methoden implementieren.
  • Abstrakte Methoden können nicht statisch oder virtuell sein.

Beispiel für eine abstrakte Klasse in C #

Problemstellung: Nehmen wir ein weiteres Beispiel aus der Praxis. Angenommen, Sie werden aufgefordert, den Prozess der Angebotserstellung für eine bestimmte Organisation zu automatisieren. Der derzeitige Prozess ist vollständig manuell und erfordert die Bearbeitung vorhandener Angebotsschreiben, was fehleranfällig ist. Es gibt bestimmte Dinge, die für alle Angebotsschreiben gelten, wie z. B. Arbeitsort, Arbeitszeiten, Unternehmensbezeichnung, Unternehmensmarke usw. Andere Dinge, wie z. B. Name des Mitarbeiters, Position, Gehalt, Beitrittsdatum usw., sind für jedes Angebot spezifisch Brief.

Lösung : Sie würden eine abstrakte Klasse für den oben genannten Zweck entwerfen. Mal sehen wie.

Code:

ode: using System;
abstract class OfferLetter
(
public abstract string Name(string name);
public abstract string Designation(string designation);
public abstract int Payment(int pay);
public abstract string DOJ(string doj);
public string CompanyName()
(
return "XYZ Corporation Pvt. Ltd.";
)
public string OfficeAddress()
(
return "512, Manhattan, NY";
)
public string CompanyBranding()
(
return this.CompanyName() + " is a privately owned regsitered corporation operating \n under the license provided by the state of New York.";
)
public string Disclaimer()
(
return "This letter and its contents are confidential in nature and are intended only \n for the recipient."+
"\nIf you are not the correct recipient, kindly return it immediately \n to " + this.CompanyName() + " " + this.OfficeAddress() + ".";
)
)
class PrintOfferLetter : OfferLetter
(
public override string Name(string name)
(
return name;
)
public override string Designation(string designation)
(
return designation;
)
public override int Payment(int pay)
(
return pay;
)
public override string DOJ(string doj)
(
return doj;
)
)
public class Program
(
public static void Main()
(
PrintOfferLetter ltr = new PrintOfferLetter();
string empName = "Mr. ABC", designation = "Senior Consultant", doj = "20-02-2020";
int pay = 50000;
Console.WriteLine(ltr.CompanyName() + " is very happy to extend this offer letter to \n" + ltr.Name(empName)
+ " at the designation of " + ltr.Designation(designation) + " with an annual pay of " + ltr.Payment(pay) + "$.");
Console.WriteLine("\nYou are required to report at " + ltr.OfficeAddress() + " from " + ltr.DOJ(doj) + " (dd-mm-yyyy).");
Console.WriteLine("\n\n" + ltr.CompanyBranding());
Console.WriteLine("\n\n" + ltr.Disclaimer());
)
)

Ausgabe:

Fazit

Kurz gesagt, eine abstrakte Klasse ist einfach eine unvollständige oder teilweise vollständige Klasse, aus der andere Klassen ihre Logik ableiten und darauf aufbauen können. In diesem Artikel haben wir gesehen, wie eine abstrakte Klasse deklariert wird und funktioniert. Wir haben Beispiele aus der Praxis gesehen, wie abstrakte Klassen verwendet werden und wie sie sich von Schnittstellen unterscheiden. Es wird empfohlen, abstrakte Klassen so oft wie möglich in Ihrem Code zu verwenden. Dies ist eine wichtige Übung für eine gute Programmierung.

Empfohlene Artikel

Dies ist eine Anleitung für Abstract Class in C #. Hier besprechen wir die Definition und Funktionsweise der abstrakten Klasse in C # zusammen mit Regeln und einem Beispiel. Sie können auch unsere anderen verwandten Artikel durchgehen, um mehr zu erfahren -

  1. Was sind abstrakte Klassen in JavaScript?
  2. Abstrakte Klasse in C ++? (Beispiele)
  3. Was ist Abstract Class in PHP?
  4. Übersicht über die abstrakte Klasse in Python