Co je abstraktní třída v C #?

Slovo abstrakt znamená myšlenku nebo nápad, který nemá žádnou fyzickou podobu, ale funguje jako základ pro jiné věci. To samé je koncept abstraktní třídy. V tomto článku bychom diskutovali o abstraktních třídách v C #. Abstraktní třída je speciální třída v C #, kterou nelze vytvořit instancí, tj. Nemůžete vytvářet objekty abstraktní třídy. Účelem abstraktní třídy je poskytnout kosterní strukturu pro další třídy, z níž lze odvodit. Abstraktní třídy nemají vlastní implementaci. Vyžadují, aby vývojáři a programátoři pocházeli z abstraktní třídy a stavěli na kosterní struktuře, tj. Psali jejich implementaci. Abstraktní třída může také mít abstraktní deklarace metod uvnitř. Tyto metody opět nemohou mít žádné definice.

Syntaxe deklarace abstraktních tříd a metod spočívá v umísťování abstraktu klíčového slova před deklaraci. Tak jednoduché.

Syntax:

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

Pamatujte, že abstraktní metody nemohou mít definice. Deklarace abstraktních metod tedy končí středníkem. Lze je pouze deklarovat. Definice musí být uvedeny v odvozených ne abstraktních třídách.

Jak abstraktní třída funguje v C #?

Abstraktní klíčové slovo přikazuje kompilátoru, že třída je základní kostrou struktury, která má být implementována do odvozených tříd. Pokud kompilátor najde nějakou třídu odvozenou od abstraktní základní třídy, zkontroluje, zda jsou všechny abstraktní metody a vlastnosti přepsány a implementovány do odvozené třídy.

Abstraktní třída vs rozhraní

Nyní se možná ptáte, co to všechno a jaké rozhraní dělá. Jak se tedy abstraktní třída liší od rozhraní?

Rozumíme tomu na příkladu. Řekněme, že provozujeme vydavatelskou společnost a najali jsme několik editorů, aby psali sloupce pro náš časopis. Předpokládejme, že jsou odborníky v různých žánrech, píšeme články, které mají být publikovány v určitý den v týdnu, a všichni jsou najati za stejný plat.

Definujme abstraktní třídu zaměstnanců pro naše editory.

Kód:

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

Můžeme snadno implementovat způsob platby s vědomím, že to bude stejné pro všechny. Další dvě metody byly prohlášeny za abstraktní, které mají být implementovány odvozenou třídou. Jeden by mohl pro každý editor prohlásit běžnou třídu odvozenou od abstraktní třídy a poté implementovat abstraktní metody pro definování žánrů a dnů. Nyní předpokládejme, že plat každého editora je také odlišný. Jedním ze způsobů, jak změnit náš kód, je prohlásit způsob platby za abstraktní. Druhým způsobem by bylo deklarovat celý EmployeeEditor jako rozhraní a dát plné svobodě zděděným třídám.

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

Abstraktní třída je tedy základní třídou, na které mohou ostatní třídy stavět. Vzhledem k tomu, rozhraní je plán pro jiné třídy odkazovat a stavět od nuly.

Pravidla abstraktní třídy v C #

Při práci s abstraktními třídami je třeba dodržovat určitá pravidla.

  • Protože abstraktní třídy mají neúplné definice metod, nelze je tedy konkretizovat. Jakýkoli pokus o vytvoření objektu abstraktní třídy by měl za následek chybu kompilace.
  • Abstraktní metody nelze definovat v abstraktních třídách, ale pouze deklarované. Tělo metody musí být definováno v odvozených třídách.
  • Odvozené třídy musí implementovat všechny abstraktní metody.
  • Abstraktní metody nemohou být statické nebo virtuální.

Příklad abstraktní třídy v C #

Prohlášení o problému: Vezměme si další příklad ze skutečného světa. Předpokládejme, že jste vyzváni k automatizaci procesu generování nabídkových dopisů pro určitou organizaci. Aktuální postup je zcela manuální a vyžaduje úpravu existujících nabídkových dopisů, což je náchylné k chybám. Pro některé nabídkové dopisy jsou určité věci, jako je místo výkonu práce, načasování práce, název společnosti, obchodní značka atd. Pro každou nabídku jsou specifické další údaje, jako je jméno zaměstnance, pozice, plat, datum připojení atd. dopis.

Řešení : Navrhli byste abstraktní třídu pro výše uvedený účel. Uvidíme jak.

Kód:

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

Výstup:

Závěr

Stručně řečeno, abstraktní třída je prostě neúplná nebo částečně úplná třída, kterou mohou jiné třídy odvodit a na ní stavět svou logiku. V tomto článku jsme viděli, jak je abstraktní třída deklarována a funguje. Viděli jsme příklady využití abstraktních tříd a jejich odlišnosti od rozhraní. Doporučujeme v kódu co nejvíce zkusit použít abstraktní třídy. Toto je zásadní postup dobrého programování.

Doporučené články

Toto je průvodce abstraktní třídou v C #. Zde diskutujeme definici a jak abstraktní třída funguje v C # spolu s pravidly a příkladem. Další informace naleznete také v dalších souvisejících článcích -

  1. Co jsou abstraktní třídy v JavaScriptu?
  2. Abstraktní třída v C ++? (Příklady)
  3. Co je abstraktní třída v PHP?
  4. Přehled abstraktní třídy v Pythonu

Kategorie: