Heim  >  Artikel  >  Backend-Entwicklung  >  Abstrakte Klasse in C#

Abstrakte Klasse in C#

WBOY
WBOYOriginal
2024-09-03 15:24:41277Durchsuche

Das Wort „abstrakt“ bedeutet einen Gedanken 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 besprechen wir abstrakte Klassen in C#. Eine abstrakte Klasse ist eine spezielle Klasse in C#, die nicht instanziiert werden kann, d. h. Sie können keine Objekte einer abstrakten Klasse erstellen. Der Zweck einer abstrakten Klasse besteht darin, eine Grundstruktur bereitzustellen, von der andere Klassen abgeleitet werden können. Abstrakte Klassen haben keine eigene Implementierung. Sie erfordern, dass Entwickler und Programmierer von der abstrakten Klasse ableiten und auf der Grundstruktur aufbauen, d. h. ihre Implementierung schreiben. Eine abstrakte Klasse kann auch abstrakte Methodendeklarationen enthalten. Auch diese Methoden können keine Definitionen haben.

Die Syntax der Deklaration abstrakter Klassen und Methoden besteht darin, das Schlüsselwort abstract vor der Deklaration zu platzieren. So einfach ist das.

Syntax:

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

Denken Sie daran, dass abstrakte Methoden keine Definitionen haben können. Daher enden die abstrakten Methodendeklarationen mit einem Semikolon. Sie können nur deklariert werden. Die Definitionen müssen in abgeleiteten, nicht abstrakten Klassen bereitgestellt 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 vs. Schnittstelle

Jetzt fragen Sie sich vielleicht, was das alles ist und was die Schnittstelle macht. 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 engagiert, die Kolumnen für unser Magazin schreiben. Nehmen wir an, sie sind Experten in verschiedenen Genres, schreiben Artikel, die an einem bestimmten Wochentag veröffentlicht werden, und werden alle zum gleichen Gehalt eingestellt.

Lassen Sie uns die abstrakte Employee-Klasse für unsere Redakteure definieren.

Code:

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

Wir könnten die Zahlungsmethode problemlos implementieren, da wir wussten, dass sie für alle gleich wäre. Die anderen beiden Methoden wurden als abstrakt deklariert, um von der abgeleiteten Klasse implementiert zu werden. Man könnte für jeden von der abstrakten Klasse abgeleiteten Editor 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 jedes Redakteurs 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 der Vererbung von Klassen volle Freiheit zu geben.

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

Somit ist eine abstrakte Klasse eine Basisklasse, auf der andere Klassen aufbauen können. Eine Schnittstelle hingegen ist eine Blaupause für andere Klassen, auf die sie verweisen und die sie von Grund auf neu erstellen können.

Regeln der abstrakten Klasse in C#

Bei der Arbeit mit abstrakten Klassen sind bestimmte Regeln zu beachten.

  • 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 bei der Kompilierung führen.
  • Abstrakte Methoden können nicht in abstrakten Klassen definiert, sondern nur deklariert werden. Der Methodenkörper muss in abgeleiteten Klassen definiert werden.
  • 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 gebeten, den Prozess der Erstellung von Angebotsschreiben für eine bestimmte Organisation zu automatisieren. Der aktuelle Prozess ist vollständig manuell und erfordert die Bearbeitung bestehender Angebotsschreiben, was fehleranfällig ist. Es gibt bestimmte Dinge, die für alle Angebotsschreiben gleich sind, wie etwa der Arbeitsort, die Arbeitszeiten, der Firmentitel, das Branding des Unternehmens usw. Andere Dinge wie der Name des Mitarbeiters, die Position, das Gehalt, das Eintrittsdatum usw. sind jeweils spezifisch Angebotsschreiben.

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:

Abstrakte Klasse in C#

Fazit

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

Das obige ist der detaillierte Inhalt vonAbstrakte Klasse in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:C# SortedDictionaryNächster Artikel:C# SortedDictionary