Абстрактные классы — это базовые классы, которые нельзя создавать напрямую, и они служат шаблонами для производных классов. Интерфейсы — это контракты, которые определяют набор методов, которые класс должен реализовать.
Ключевое отличие в том, как каждый из них работает с реализацией методов:
Критическое различие в том, как классы используют эти конструкции:
Используй абстрактные классы, когда:
Используй интерфейсы, когда:
Абстрактные классы устанавливают отношение является, представляя иерархическую структуру. Интерфейсы устанавливают отношение может делать, описывая то, на что способен класс.
Современный C# немного размыл границы с введением реализаций интерфейсов по умолчанию в C# 8.0, но фундаментальное различие остаётся: абстрактные классы — для иерархий наследования, интерфейсы — для определения контрактов между несвязанными типами.
Основная цель интерфейса — установить отношение is-a, которое представляет иерархическую структуру наследования.
Новый — ещё не проверен сообществом
Вы