Какво представлява абстрактният клас в C #?

Думата абстрактно означава мисъл или идея, която няма своя собствена физическа форма, но действа като основа за други неща. Същата е концепцията зад абстрактния клас. В тази статия ще обсъждаме абстрактни класове в C #. Абстрактният клас е специален клас в C #, който не може да бъде инстанциран, т.е. не можете да създавате обекти от абстрактен клас. Целта на абстрактния клас е да осигури скелетна структура, от която да произлизат други класове. Абстрактните часове нямат собствена реализация. Те изискват от разработчиците и програмистите да произхождат от абстрактния клас и да надграждат скелетната структура, т.е. да напишат тяхното изпълнение. Абстрактният клас може също да има абстрактни декларации на метода вътре. Отново тези методи не могат да имат определения.

Синтаксисът на деклариране на абстрактни класове и методи включва поставянето на ключовата дума абстракт преди декларацията. Толкова просто като това.

Синтаксис:

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

Не забравяйте, че абстрактните методи не могат да имат определения. Така декларациите на абстрактния метод завършват с точка и запетая. Те могат само да бъдат декларирани. Определенията трябва да бъдат предоставени в производни неабстракционни класове.

Как работи абстрактният клас в C #?

Абстрактната ключова дума инструктира компилатора, че класът е скелетна структура на основен клас, която трябва да бъде приложена в производни класове. Ако компилаторът намери някакъв клас, производен на абстрактния основен клас, той проверява дали всички абстрактни методи и свойства са надписани и внедрени в извлечения клас.

Абстрактен клас срещу интерфейс

Сега може би се чудите какво е всичко това и какво прави интерфейсът. И така, как абстрактният клас се различава от интерфейса?

Нека разберем това с пример. Нека да кажем, че управляваме издателска компания и сме наели няколко редактори, които да пишат колони за нашето списание. Нека приемем, че са експерти в различни жанрове, пишат статии, които ще бъдат публикувани в определен ден от седмицата и всички са наети с една и съща заплата.

Нека да определим абстрактния клас Служители за нашите редактори.

Код:

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

Лесно бихме могли да приложим метода на плащане, като знаем, че той ще бъде еднакъв за всички. Останалите два метода бяха обявени за абстрактни, за да бъдат реализирани от извлечения клас. Човек би могъл да декларира нормален клас за всеки редактор, произхождащ от абстрактния клас и след това може да приложи абстрактните методи за дефиниране на жанрове и дни. Сега, приемете, че заплатата на всеки редактор също е различна. Един от начините да променим нашия код е да обявим начина на плащане като абстрактно. Другият начин би бил да декларирате целия EmployeeEditor като интерфейс и да дадете пълна свобода на наследяването на класове.

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

По този начин абстрактният клас е основен клас за изграждане на други класове. Като има предвид, че интерфейсът е план за други класове, към които се отнасят и изграждат от нулата.

Правила на абстрактния клас в C #

Има определени правила, които трябва да спазвате при работа с абстрактни класове.

  • Тъй като абстрактните класове имат непълни дефиниции на метода, следователно те не могат да бъдат инстанцирани. Всеки опит за създаване на обект от абстрактен клас би довел до грешка във времето на компилиране.
  • Абстрактните методи не могат да бъдат определени в абстрактни класове, а само декларирани. Тялото на метода трябва да бъде дефинирано в производни класове.
  • Получените класове трябва да прилагат всички абстрактни методи.
  • Абстрактните методи не могат да бъдат статични или виртуални.

Пример за абстрактен клас в C #

Изложение на проблема: Нека вземем друг пример в реалния свят. Да приемем, че ще бъдете помолени да автоматизирате процеса на генериране на офертни писма за определена организация. Настоящият процес е напълно ръчен и изисква редактиране на съществуващи писма с оферти, което е предразположено към грешки. Има някои неща, които биха били общи за всички писма за оферти, като място за работа, време за работа, наименование на фирмата, фирмено брандиране и др. Други неща, като име на служител, длъжност, заплата, дата на присъединяване и т.н., са специфични за всяка оферта писмо.

Решение : Бихте проектирали абстрактен клас за горната цел. Нека видим как.

Код:

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

изход:

заключение

С две думи абстрактният клас е просто непълен или частично завършен клас, който другите класове могат да извлекат и изграждат своята логика върху него. В тази статия видяхме как се декларира абстрактен клас и работи. Видяхме примери от реалния живот за използването на абстрактни класове и как те се различават от интерфейсите. Препоръчва се да опитате и да използвате абстрактни класове колкото е възможно повече във вашия код. Това е решаваща практика на доброто програмиране.

Препоръчителни статии

Това е ръководство за абстрактния клас в C #. Тук обсъждаме дефиницията и как работи абстрактният клас в C #, заедно с правила и пример. Можете също да прегледате и другите ни свързани статии, за да научите повече -

  1. Какво представляват абстрактните класове в JavaScript?
  2. Абстрактен клас в C ++? (Примери)
  3. Какво представлява абстрактният клас в PHP?
  4. Преглед на абстрактния клас в Python