Що таке абстрактний клас у 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