Ce este clasa abstractă în C #?

Cuvântul abstract înseamnă un gând sau o idee care nu are nicio formă fizică proprie, dar care acționează ca bază pentru alte lucruri. Același lucru este conceptul din spatele clasei abstracte. În acest articol, am discuta despre clasele abstracte din C #. O clasă abstractă este o clasă specială din C # care nu poate fi instantanată, adică nu puteți crea obiecte ale unei clase abstracte. Scopul unei clase abstracte este de a oferi o structură scheletică pentru care provin alte clase. Clasele abstracte nu au o implementare proprie. Aceștia necesită dezvoltatorii și programatorii să deriveze din clasa abstractă și să se bazeze pe structura scheletului, adică să-și scrie implementarea. O clasă abstractă poate avea și în interior declarații despre metoda abstractă. Din nou, aceste metode nu pot avea nicio definiție.

Sintaxa declarării claselor și metodelor abstracte implică plasarea abstractului de cuvinte cheie înainte de declarație. Simplu ca buna ziua.

Sintaxă:

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

Nu uitați, metodele abstracte nu pot avea definiții. Astfel, declarațiile abstracte ale metodei se încheie cu punct și virgulă. Ele pot fi declarate doar. Definițiile trebuie să fie furnizate în clase derivate care nu sunt abstracte.

Cum funcționează clasa abstractă în C #?

Cuvântul cheie abstract indică compilatorului că clasa este o structură scheletică a clasei de bază care trebuie implementată în clase derivate. Dacă compilatorul găsește vreo clasă care derivă clasa de bază abstractă, verifică dacă toate metodele și proprietățile abstracte sunt suprasolicitate și implementate în clasa derivată.

Abstract Class vs Interface

Acum, este posibil să vă întrebați ce sunt toate acestea și ce interfață face. Deci, cum diferă o clasă abstractă de o interfață?

Să înțelegem acest lucru cu un exemplu. Să spunem că conducem o companie de publicare și am angajat câțiva editori pentru a scrie coloane pentru revista noastră. Să presupunem că sunt experți în diferite genuri, scrie articole care vor fi publicate într-o anumită zi a săptămânii și sunt angajați cu același salariu.

Să definim clasa abstractă a angajaților pentru editorii noștri.

Cod:

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

Am putea implementa cu ușurință metoda de plată știind că aceasta va fi aceeași pentru toți. Celelalte două metode au fost declarate abstracte pentru a fi puse în aplicare de clasa derivată. Se poate declara o clasă normală pentru fiecare editor care derivă din clasa abstractă și poate apoi să implementeze metodele abstracte pentru a defini genurile și zilele. Acum, să presupunem că salariul fiecărui editor este, de asemenea, diferit. O modalitate de a ne modifica codul este de a declara metoda de plată ca abstractă. Cealaltă modalitate ar fi să declare întregul EmployeeEditor ca o interfață și să acordăm libertate deplină claselor de moștenire.

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

Astfel, o clasă abstractă este o clasă de bază pentru alte clase pe care să se bazeze. Întrucât, o interfață este un model pentru alte clase pentru a face referire și construi de la zero.

Reguli ale clasei abstracte în C #

Există anumite reguli de urmat atunci când lucrați cu clase abstracte.

  • Deoarece clasele abstracte au definiții incomplete ale metodei, prin urmare nu pot fi instanțate. Orice încercare de a crea un obiect dintr-o clasă abstractă ar avea ca rezultat o eroare de compilare.
  • Metodele abstracte nu pot fi definite în clase abstracte, ci doar declarate. Corpul metodei trebuie definit în clase derivate.
  • Clasele derivate trebuie să implementeze toate metodele abstracte.
  • Metodele abstracte nu pot fi statice sau virtuale.

Exemplu de clasă abstractă în C #

Declarație de problemă: Să luăm un alt exemplu din lumea reală. Presupunem că vi se cere să automatizați procesul de generare a scrisorii de ofertă pentru o anumită organizație. Procesul curent este complet manual și necesită editarea scrisorilor de ofertă existente, care este predispus la erori. Există anumite lucruri care ar fi obișnuite pentru toate scrisorile de ofertă, cum ar fi locația de lucru, calendarul lucrării, titlul companiei, brandingul companiei etc. scrisoare.

Soluție : Ați proiecta o clasă abstractă pentru scopul de mai sus. Să vedem cum.

Cod:

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

ieşire:

Concluzie

Pe scurt, o clasă abstractă este pur și simplu o clasă incompletă sau parțial completă pe care alte clase le pot deriva și construi logica deasupra ei. În acest articol, am văzut cum este declarată o clasă abstractă și funcționează. Am văzut exemple din viața reală a utilizării claselor abstracte și modul în care acestea sunt diferite de interfețe. Se recomandă să încercați să utilizați clase abstracte pe cât posibil în codul dvs. Aceasta este o practică crucială a unei bune programări.

Articole recomandate

Acesta este un ghid pentru clasa abstractă în C #. Aici discutăm definiția și modul în care funcționează clasa abstractă în C # împreună cu reguli și un exemplu. Puteți parcurge și alte articole conexe pentru a afla mai multe -

  1. Ce sunt clasele abstracte în JavaScript?
  2. Abstract Class in C ++? (Exemple)
  3. Ce este clasa abstractă în PHP?
  4. Prezentare generală a clasei abstracte din Python