Sobes.tech
Junior
117
questionbank

В чем разница между абстрактным классом и интерфейсом?

Answer from AI

sobes.tech AI

Абстрактный класс может содержать поля, конструкторы, реализованные и абстрактные методы. Интерфейс содержит только объявления членов (методы, свойства, индексаторы, события), которые должны быть реализованы классами, его наследующими.

Описание Абстрактный класс Интерфейс
Члены Могут быть реализованы, могут быть абстрактны, содержать поля. Только объявления членов (без реализации до C# 8).
Наследование Класс может наследоваться только от одного абстрактного класса. Класс может реализовывать множество интерфейсов.
Модификаторы доступа Могут использоваться различные модификаторы доступа (public, protected, internal). Все члены интерфейса неявно public (до C# 8).
Конструкторы Могут иметь конструкторы. Не могут иметь конструкторов.
Состояние Может хранить состояние через поля. Не может хранить состояние.

Пример абстрактного класса:

// Абстрактный класс Shape
public abstract class Shape
{
    // Абстрактный метод, который должен быть реализован производными классами
    public abstract double GetArea();

    // Реализованный метод
    public void DisplayInfo()
    {
        Console.WriteLine($"Площадь: {GetArea()}");
    }
}

Пример интерфейса:

// Интерфейс IPrintable
public interface IPrintable
{
    // Объявление метода, который должен быть реализован
    void Print();
}