Hva er abstrakt klasse i C #?

Ordet abstrakt betyr en tanke eller en idé som ikke har noen fysisk form, men fungerer som en base for andre ting. Det samme er konseptet bak abstrakt klasse. I denne artikkelen vil vi diskutere Abstract Classes i C #. En abstrakt klasse er en spesiell klasse i C # som ikke lar seg instantisere, dvs. at du ikke kan lage objekter av en abstrakt klasse. Formålet med en abstrakt klasse er å gi en skjelettstruktur for andre klasser å stamme fra. Abstrakte klasser har ingen implementering av seg selv. De krever at utviklerne og programmererne stammer fra den abstrakte klassen og bygger videre på skjelettstrukturen, dvs. skriver implementeringen deres. En abstrakt klasse kan også ha abstrakte metodedeklarasjoner inne. Igjen kan ikke disse metodene ha noen definisjoner.

Syntaksen til å erklære abstrakte klasser og metoder innebærer å plassere søkeordet abstrakt før erklæringen. Så enkelt som det.

syntaks:

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

Husk at abstrakte metoder ikke kan ha definisjoner. Dermed ender de abstrakte metodedeklarasjonene med et semikolon. De kan bare erklæres. Definisjonene må gis i avledede ikke-abstrakte klasser.

Hvordan abstrakt klasse fungerer i C #?

Det abstrakte nøkkelordet instruerer kompilatoren om at klassen er en skjelettstruktur i baseklassen som skal implementeres i avledede klasser. Hvis kompilatoren finner noen klasse som stammer fra den abstrakte baseklassen, kontrollerer den om alle de abstrakte metodene og egenskapene blir tilsidesatt og implementert i den avledede klassen.

Abstrakt klasse vs grensesnitt

Nå lurer du kanskje på hva som er alt dette og hva grensesnittet gjør. Så, hvordan er en abstrakt klasse forskjellig fra et grensesnitt?

La oss forstå dette med et eksempel. La oss si at vi driver et forlag og har ansatt noen redaktører for å skrive kolonner for bladet vårt. La oss anta at de er eksperter i forskjellige sjangre, skriver artikler som skal publiseres på en bestemt ukedag og alle blir ansatt med samme lønn.

La oss definere den abstrakte ansatteklassen for våre redaksjoner.

Kode:

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

Vi kunne enkelt implementere betalingsmetoden og vite at den ville være den samme for alle. De to andre metodene ble erklært abstrakte for å bli implementert av den avledede klassen. Man kan erklære en normal klasse for hver redaktør som stammer fra den abstrakte klassen og kan deretter implementere de abstrakte metodene for å definere sjangre og dager. Anta nå at lønnen til hver redaktør også er forskjellig. En måte å endre koden på er å erklære betalingsmetoden som abstrakt. Den andre måten ville være å erklære hele EmployeeEditor som et grensesnitt og gi full frihet til å arve klasser.

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

Dermed er en abstrakt klasse en baseklasse for andre klasser å bygge videre på. Mens grensesnitt er en blåkopi for andre klasser å referere til og bygge fra bunnen av.

Regler for abstrakt klasse i C #

Det er visse regler å følge når du arbeider med abstrakte klasser.

  • Siden abstrakte klasser har ufullstendige metodedefinisjoner, kan de derfor ikke bli instantivert. Ethvert forsøk på å lage et objekt av en abstrakt klasse vil resultere i en kompilertidsfeil.
  • Abstrakte metoder kan ikke defineres i abstrakte klasser, men kun deklarert. Metodeorganet må defineres i avledede klasser.
  • Avledede klasser må implementere alle de abstrakte metodene.
  • Abstrakte metoder kan ikke være statiske eller virtuelle.

Eksempel på abstrakt klasse i C #

Problemerklæring: La oss ta et annet eksempel i den virkelige verden. Anta at du blir bedt om å automatisere prosessen med generering av tilbudsbrev for en viss organisasjon. Den nåværende prosessen er fullstendig manuell og krever redigering av eksisterende tilbudsbrev, som er utsatt for feil. Det er visse ting som vil være vanlig for alle tilbudsbrev, for eksempel arbeidsplassering, arbeidstider, firmanavn, firmamerking, etc. Andre ting som ansattes navn, stilling, lønn, tiltredelsesdato osv. Er spesifikke for hvert tilbud brev.

Løsning : Du vil designe en abstrakt klasse for formålet ovenfor. La oss 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());
)
)

Produksjon:

Konklusjon

I et nøtteskall er en abstrakt klasse ganske enkelt en ufullstendig eller delvis fullstendig klasse som andre klasser kan utlede og bygge sin logikk på toppen av den. I denne artikkelen har vi sett hvordan en abstrakt klasse blir erklært og den fungerer. Vi så eksempler fra bruk av abstrakte klasser og hvordan de er forskjellige fra grensesnitt. Det anbefales å prøve å bruke abstrakte klasser så mye som mulig i koden. Dette er en avgjørende praksis for god programmering.

Anbefalte artikler

Dette er en guide til Abstract Class i C #. Her diskuterer vi definisjonen og hvordan abstrakt klasse fungerer i C # sammen med regler og et eksempel. Du kan også gå gjennom andre relaterte artikler for å lære mer -

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