Что такое абстрактный класс в C #?

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

Синтаксис объявления абстрактных классов и методов включает размещение ключевого слова abstract перед объявлением. Так просто, как, что.

Синтаксис:

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

Помните, у абстрактных методов не может быть определений. Таким образом, объявления абстрактных методов заканчиваются точкой с запятой. Они могут быть только объявлены. Определения должны быть предоставлены в производных неабстрактных классах.

Как абстрактный класс работает в C #?

Ключевое слово abstract указывает компилятору, что класс является базовой структурой базового класса, которая должна быть реализована в производных классах. Если компилятор находит какой-либо класс, производный абстрактный базовый класс, он проверяет, все ли абстрактные методы и свойства переопределены и реализованы в производном классе.

Абстрактный класс против интерфейса

Теперь вам может быть интересно, что все это и как делает интерфейс. Итак, чем абстрактный класс отличается от интерфейса?

Позвольте нам понять это на примере. Допустим, мы управляем издательской компанией и наняли несколько редакторов для написания колонок для нашего журнала. Давайте предположим, что они являются экспертами в разных жанрах, пишут статьи для публикации в определенный день недели, и все они нанимаются с одинаковой зарплатой.

Давайте определим абстрактный класс Employee для наших редакторов.

Код:

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

Мы могли бы легко реализовать метод оплаты, зная, что он будет одинаковым для всех. Два других метода были объявлены абстрактными для реализации производным классом. Можно объявить нормальный класс для каждого редактора, производного от абстрактного класса, а затем реализовать абстрактные методы для определения жанров и дней. Теперь предположим, что зарплата каждого редактора также отличается. Один из способов изменить наш код - объявить метод Payment абстрактным. Другим способом было бы объявить весь 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