Рекомендуем, 2024

Выбор редакции

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

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

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

абстрактный класс MyCircle {abstract public int Area (); } Класс MyArea: MyCircle {public override int Area () {обратная сторона * side; .....}}
1 2 3 4 5 6 7 8 9 10 11абстрактный класс MyCircle {abstract public int Area (); } Класс MyArea: MyCircle {public override int Area () {обратная сторона * side;, , , , , }}

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

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

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

using System.Collections.Generic; использование System.Linq; используя System.Text; пространство имен MyName {открытый интерфейс MyData {void getdata (); void showdata (); } открытый класс NameData: MyData {public double getdata () {string name; Console.WriteLine («Введите имя:»); имя = Console.ReadLine (); } public void showdata () {Console.WriteLine («Меня зовут:», имя); }}}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22используя систему. Коллекции. Универсальный; используя систему. Линк; используя систему. Текст; пространство имен MyName {открытый интерфейс MyData {void getdata (); void showdata (); } открытый класс NameData: MyData {public double getdata () {string name; Приставка . WriteLine («Введите имя:»); имя = консоль ReadLine (); } public void showdata () {Консоль. WriteLine («Меня зовут:», имя); }}}

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

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

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