Hvad er abstrakt klasse i C #?

Ordet abstrakt betyder en tanke eller en idé, der ikke har nogen fysisk form, men fungerer som en base for andre ting. Det samme er begrebet bag abstrakt klasse. I denne artikel vil vi diskutere Abstract Classes i C #. En abstrakt klasse er en speciel klasse i C #, der ikke kan instantieres, dvs. du kan ikke oprette objekter af en abstrakt klasse. Formålet med en abstrakt klasse er at skabe en skeletstruktur for andre klasser at stamme fra. Abstrakte klasser har ingen egen implementering. De kræver, at udviklere og programmerere stammer fra den abstrakte klasse og bygger på skeletstrukturen, dvs. skriver deres implementering. En abstrakt klasse kan også have abstrakte metodedeklarationer inde. Igen kan disse metoder ikke have nogen definitioner.

Syntaks for at erklære abstrakte klasser og metoder involverer placering af nøgleordet abstrakt inden erklæringen. Så simpelt som det.

Syntaks:

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

Husk, at abstrakte metoder ikke kan have definitioner. Således slutter de abstrakte metodedeklarationer med et semikolon. De kan kun erklæres. Definitionerne skal gives i afledte ikke-abstrakte klasser.

Hvordan fungerer abstrakt klasse i C #?

Det abstrakte nøgleord instruerer kompilatoren om, at klassen er en baseklasse-skeletstruktur, der skal implementeres i afledte klasser. Hvis kompilatoren finder nogen klasse, der stammer fra den abstrakte baseklasse, kontrollerer den, om alle abstrakte metoder og egenskaber er tilsidesat og implementeret i den afledte klasse.

Abstrakt klasse vs interface

Nu spekulerer du måske på, hvad er alt dette, og hvad interface gør. Så hvordan er en abstrakt klasse forskellig fra en grænseflade?

Lad os forstå dette med et eksempel. Lad os sige, at vi driver et forlag og har ansat et par redaktører til at skrive kolonner til vores magasin. Lad os antage, at de er eksperter i forskellige genrer, skriver artikler, der skal offentliggøres på en bestemt ugedag, og alle ansættes til samme løn.

Lad os definere den abstrakte medarbejderklasse for vores redaktører.

Kode:

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

Vi kunne let implementere betalingsmetoden ved at vide, at den ville være den samme for alle. De to andre metoder blev erklæret abstrakte til at blive implementeret af den afledte klasse. Man kunne erklære en normal klasse for hver redaktør, der stammer fra den abstrakte klasse og kan derefter implementere de abstrakte metoder til at definere genrer og dage. Antag nu, at hver redaktørs løn også er forskellig. En måde at ændre vores kode på er at erklære betalingsmetoden som abstrakt. Den anden måde ville være at erklære hele EmployeeEditor som et interface og give fuld frihed til at arve klasser.

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

Således er en abstrakt klasse en baseklasse for andre klasser at bygge videre på. Mens en grænseflade er en plan for andre klasser at referere til og bygge fra bunden af.

Regler for abstrakt klasse i C #

Der er visse regler, der skal følges, når man arbejder med abstrakte klasser.

  • Da abstrakte klasser har ufuldstændige metodedefinitioner, kan de derfor ikke blive instantieret. Ethvert forsøg på at oprette et objekt fra en abstrakt klasse ville resultere i en kompileringstid-fejl.
  • Abstrakte metoder kan ikke defineres i abstrakte klasser, men kun deklareret. Metodekroppen skal defineres i afledte klasser.
  • Afledte klasser skal implementere alle de abstrakte metoder.
  • Abstrakte metoder kan ikke være statiske eller virtuelle.

Eksempel på abstrakt klasse i C #

Problemerklæring: Lad os tage et andet eksempel i den virkelige verden. Antag, at du bliver bedt om at automatisere processen med generering af tilbudsbrev til en bestemt organisation. Den aktuelle proces er helt manuel og kræver redigering af eksisterende tilbudsbreve, som er tilbøjelige til fejl. Der er visse ting, der vil være fælles for alle tilbudsbreve, såsom arbejdsplacering, arbejdstiminger, firmanavn, virksomheds branding osv. Andre ting såsom medarbejdernavn, stilling, løn, tiltrædelsesdato osv. Er specifikke for hvert tilbud brev.

Løsning : Du ville designe en abstrakt klasse til ovenstående formål. Lad os se hvordan.

Kode:

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());
)
)

Produktion:

Konklusion

Kort sagt er en abstrakt klasse simpelthen en ufuldstændig eller delvist komplet klasse, som andre klasser kan udlede og opbygge deres logik oven på. I denne artikel har vi set, hvordan en abstrakt klasse erklæres og fungerer. Vi så eksempler på brug af abstrakte klasser og hvordan de adskiller sig fra grænseflader. Det anbefales at prøve at bruge abstrakte klasser så meget som muligt i din kode. Dette er en afgørende praksis for god programmering.

Anbefalede artikler

Dette er en guide til Abstract Class i C #. Her diskuterer vi definitionen og hvordan abstrakt klasse fungerer i C # sammen med regler og et eksempel. Du kan også gennemgå vores andre relaterede artikler for at lære mere -

  1. Hvad er abstrakte klasser i JavaScript?
  2. Abstrakt klasse i C ++? (Eksempler)
  3. Hvad er abstrakt klasse i PHP?
  4. Oversigt over Abstract Class i Python

Kategori: