Разница между абстрактным классом и интерфейсом в C #

Абстрактный класс

Абстрактный класс - это класс, предназначенный только для использования в качестве базового класса других классов. Модификатор abstract используется для создания абстрактного класса. Модификатор abstract указывает, что существует некоторая недостающая реализация, которую необходимо реализовать в производном от нее классе. Абстрактный класс может иметь абстрактные и неабстрактные члены. У абстрактного класса должен быть хотя бы один абстрактный метод, иначе нет смысла объявлять этот класс «абстрактным».

Пример абстрактного класса в C #:
Как показано в приведенном выше примере, абстрактный метод Area внутри класса MyCircle переопределяется в производном классе MyArea..

Интерфейс

Интерфейс содержит только объявление членов, включая методы, свойства, события или индексаторы. Он не содержит реализацию этих членов. Класс или структура, реализующие интерфейс, должны обеспечивать определение методов, объявленных в интерфейсе. Это означает, что интерфейс обеспечивает стандартную структуру, которой должен следовать производный класс.

Пример интерфейса в C #:
Как показано в приведенном выше примере, интерфейс MyData имеет два объявления метода getdata () и showdata (). Класс NameData, реализующий этот интерфейс, должен дать определение методов, объявленных в интерфейсе MyData..

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

  1. Абстрактный класс может иметь как абстрактные, так и неабстрактные члены. Но в интерфейсе все члены неявно абстрактны и должны быть переопределены в производном классе.
  2. Класс может наследовать несколько интерфейсов, но только один абстрактный класс.
  3. Абстрактный класс может содержать методы с или с определением. Но интерфейс может содержать только сигнатуру метода.
  4. Абстрактный класс может быть полностью, частично или не реализован вообще, но интерфейс должен быть полностью реализован, то есть все члены должны быть определены в производном классе.
  5. Интерфейс не может содержать модификаторы доступа, но абстрактный класс может иметь его для функций, свойств или событий.