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

В C# 8.0 появилась новая языковая функция - реализации членов интерфейса по умолчанию.

public interface IRobot
{
    void Talk(string message)
    {
        Debug.WriteLine(message);
    }
}

Новые реализации интерфейса по умолчанию предоставляют элементы языка свойств. Однако это также стирает грань между абстрактным классом и интерфейсом.

В чем теперь преимущество использования абстрактного класса вместо интерфейса с реализацией по умолчанию?

1 ответ

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

В C# вам нужны интерфейсы по умолчанию, когда вам нужно реализовать (в этом случае фактически наследовать) несколько интерфейсов, потому что язык не позволяет вам наследовать от нескольких классов.

Абстрактный класс также позволяет вам иметь состояние. Состояние, то есть поля, не допускаются в интерфейсах.

Другие вопросы по тегам