Sobes.tech
Junior

Използвали ли сте абстрактни класове в проектите си?

sobes.tech AI

Отговор от AI

Да, използвал съм. Абстрактните класове се използваха за създаване на основни структури с общи методи и свойства, които след това се наследяват от конкретни класове.

// Обявяване на абстрактен клас
public abstract class Shape
{
    // Абстрактен метод, който трябва да бъде реализиран в наследяващите класове
    public abstract double GetArea();

    // Виртуален метод с реализация по подразбиране, който може да бъде презаписан
    public virtual void Draw()
    {
        Console.WriteLine("Рисуване на форма.");
    }
}

// Конкретен клас, наследяващ от Shape
public class Circle : Shape
{
    public double Radius { get; set; }

    public Circle(double radius)
    {
        Radius = radius;
    }

    // Реализация на абстрактния метод
    public override double GetArea()
    {
        return Math.PI * Radius * Radius;
    }

    // Презаписване на виртуалния метод
    public override void Draw()
    {
        Console.WriteLine($"Рисуване на кръг с радиус {Radius}.");
    }
}

Основни сценарии за използване:

  • Определяне на общ договор: Абстрактните класове позволяват да се зададе набор от методи и свойства, които трябва да присъстват във всички наследени класове.
  • Частична реализация: Възможност за предоставяне на частична реализация на функционалността в базовия клас, като се избягва пълното дублиране на кода в наследяващите класове.
  • Шаблонен модел: Често се използват при реализирането на шаблони, като "Шаблонен метод".

Разлики с интерфейсите:

Характеристика Абстрактен клас Интерфейс
Наследяване Множествено наследяване е забранено Множествена реализация е разрешена
Реализация Може да съдържа реализация на методи До C# 8.0 - само декларации, след това - реализация по подразбиране
Членове Може да има полета, конструктори, виртуални/абстрактни/обикновени методи До C# 8.0 - само методи и свойства, след това - също статични членове и реализация по подразбиране
Състояние Може да има състояние (чрез полета) Не може да има състояние