Kaj je abstraktni razred v C #?

Beseda abstrakt pomeni misel ali idejo, ki nima svoje fizične oblike, ampak deluje kot osnova za druge stvari. Isti je koncept za abstraktnim razredom. V tem članku bi razpravljali o abstraktnih razredih v C #. Abstraktni razred je poseben razred v C #, ki ga ni mogoče instancirati, torej ne morete ustvariti predmetov abstraktnega razreda. Namen abstraktnega razreda je zagotoviti skeletno strukturo, iz katere izhajajo drugi razredi. Izvlečki pouka nimajo lastne izvedbe. Od razvijalcev in programerjev zahtevajo, da izhajajo iz abstraktnega razreda in nadgradijo skeletno strukturo, torej napišejo njihovo izvajanje. Abstraktni razred ima lahko tudi v deklaracijah abstraktne metode. Tudi te metode ne morejo imeti nobenih definicij.

Skladnja izjavljanja abstraktnih razredov in metod vključuje ključno besedo abstraktno pred deklaracijo. Tako enostavno kot to.

Sintaksa:

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

Ne pozabite, da abstraktne metode ne morejo imeti definicij. Tako se deklaracije abstraktne metode končajo s podpičjem. Deklarirati jih je mogoče le. Opredelitve morajo biti podane v izvedenih ne-abstraktnih razredih.

Kako deluje abstraktni razred v C #?

Abstraktna ključna beseda prevajalcu naroči, da je razred skeletna struktura osnovnega razreda, ki jo je treba implementirati v izvedene razrede. Če prevajalnik najde kateri koli razred, ki izpelje abstraktni osnovni razred, preveri, ali so vse izvlečene metode in lastnosti prepisane in izvedene v izpeljanem razredu.

Izvleček razreda proti vmesniku

Zdaj se morda sprašujete, kaj vse je to in kaj počne vmesnik. Kako se torej abstraktni razred razlikuje od vmesnika?

Naj to razumemo s primerom. Recimo, da vodimo založniško hišo in smo najeli nekaj urednikov, ki bodo pisali kolumne za našo revijo. Predpostavimo, da so strokovnjaki različnih žanrov, pišejo članke, ki bodo objavljeni določen dan v tednu in so vsi najeti z isto plačo.

Določimo abstraktni razred Zaposleni za naše urednike.

Koda:

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

Način plačila bi zlahka izvedli, vedoč, da bo to enako za vse. Preostali dve metodi sta bili razglašeni za abstraktne in ju bo izvedel izpeljani razred. Lahko bi razglasili običajni razred za vsakega urejevalnika, ki izhaja iz abstraktnega razreda, nato pa lahko uporabijo abstraktne metode za določitev zvrsti in dni. Zdaj pa predpostavimo, da je tudi plača vsakega urednika različna. Eden od načinov za spremembo naše kode je razglasitev načina plačila kot abstraktnega. Drugi način bi bil razglasiti celoten EmployeeEditor kot vmesnik in dati popolno svobodo dedovanju razredov.

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

Tako je abstraktni razred osnovni razred, ki ga lahko gradijo drugi razredi. Medtem ko je vmesnik načrt za druge razrede, na katerega se lahko nanašajo in gradijo iz nič.

Pravila izvlečnega razreda v C #

Pri delu z abstraktnimi razredi je treba upoštevati določena pravila.

  • Ker imajo abstraktni razredi nepopolne opredelitve metod, jih ni mogoče utemeljiti. Vsak poskus ustvarjanja predmeta abstraktnega razreda bi povzročil napako v prevajalnem času.
  • Abstraktnih metod ni mogoče opredeliti v abstraktnih razredih, ampak le deklarirati. Telo metode mora biti opredeljeno v izvedenih razredih.
  • Izvedeni razredi morajo izvajati vse abstraktne metode.
  • Abstraktne metode ne morejo biti statične ali navidezne.

Primer abstraktnega razreda v C #

Izjava problema: Vzemimo še en primer iz resničnega sveta. Predpostavimo, da boste morali avtomatizirati postopek priprave ponudbenih pisem za določeno organizacijo. Trenutni postopek je popolnoma ročen in zahteva urejanje obstoječih ponudbenih pisem, kar je nagnjeno k napakam. Obstajajo nekatere stvari, ki bi bile skupne vsem ponudnikom pisem, kot so delovna lokacija, delovna ura, naziv podjetja, znamka podjetja itd. Druge stvari, kot so ime zaposlenega, položaj, plača, datum pridružitve itd., So značilne za vsako ponudbo pismo.

Rešitev : Za zgornji namen bi oblikovali abstraktni razred. Poglejmo, kako.

Koda:

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

Izhod:

Sklep

Skratka, abstraktni razred je preprosto nepopoln ali delno dovršen razred, ki ga lahko izpeljejo drugi gradniki in nadgradijo svojo logiko. V tem članku smo videli, kako se deklarira abstrakten razred in deluje. Videli smo primere uporabe abstraktnih razredov v resničnem življenju in kako se razlikujejo od vmesnikov. Priporočljivo je, da v svoji kodi poskusite čim bolj uporabljati abstraktne razrede. To je ključna praksa dobrega programiranja.

Priporočeni članki

To je vodnik za abstraktni razred v C #. Tukaj razpravljamo o definiciji in kako deluje abstraktni razred v C #, skupaj s pravili in primerom. Obiščite lahko tudi druge naše sorodne članke, če želite izvedeti več -

  1. Kaj so abstraktni razredi v JavaScript?
  2. Izvleček razreda C ++? (Primeri)
  3. Kaj je abstraktni razred v PHP?
  4. Pregled abstraktnega razreda v Pythonu