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

Оглавление:

Anonim

При разработке приложений или начале карьеры программиста необходимо знать разницу между абстрактным классом и интерфейсом в C #. И абстрактный класс, и интерфейс используются для выполнения абстракции, где можно понять абстрактные методы. Хотя их нельзя использовать одновременно.

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

Никогда не следует намереваться использовать абстрактный класс напрямую. У этого класса должен быть как минимум один абстрактный метод. И он будет отмечен ключевым словом или модификатором abstract в определении класса. С другой стороны, интерфейс позволяет кому-то только определять функциональность. Это не может быть реализовано. Хотя класс может разрабатывать только один абстрактный класс, он также может использовать преимущества различных интерфейсов.

Абстрактный класс против интерфейса в C #

В разница между абстрактным классом и интерфейсом в C # заключается в том, что «основная» функция абстрактного класса состоит в том, чтобы объяснить реальную идентичность класса, тогда как основная функция интерфейса - объяснять внешние возможности класса. Полная абстракция не предоставляется абстрактным классом, тогда как интерфейс может обеспечивать полную абстракцию.

Множественное наследование невозможно в абстрактном классе, тогда как интерфейс может делать множественное наследование, насколько это возможно.

Таблица сравнения абстрактного класса и интерфейса в C #

Параметр сравнения Абстрактный класс Интерфейс в C #
Функциональность Добавление нового метода в абстрактный класс даст возможность предоставить реализацию по умолчанию, и, таким образом, весь текущий код будет работать правильно. Добавление нового метода в интерфейс позволит отследить все реализации интерфейса и определить реализацию для последнего метода.
Различное наследование Только один абстрактный класс может быть унаследован классом Несколько интерфейсов могут быть унаследованы классом
Что они содержат? Абстрактный класс содержит элемент данных и конструкторы Интерфейс на C # не содержит элементов данных и конструкторов.
Предоставлять Абстрактный класс может предоставить полный код по умолчанию и / или детали, которые следует переопределить. Интерфейс на C # не может предоставить какой-либо код, только подпись
Скорость движения Абстрактный класс быстр, когда дело доходит до скорости Интерфейсу в C # требуется больше времени, чтобы получить реальный метод в соответствующих классах.

Что такое абстрактный класс в C #?

Абстрактный класс - это то, что может быть предназначено только как базовый класс для других классов. Это классы, у которых есть один или несколько абстрактных методов. Абстрактный метод известен как объявленный метод, но он не содержит никакой реализации.

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

Этот абстрактный класс должен иметь как минимум один абстрактный метод, который уже обсуждался выше. Без метода мы не можем объявить этот класс «абстрактным».

Иногда абстрактные классы могут не быть созданы, и им нужны подклассы для реализации абстрактных методов. Если мы создаем абстрактный класс, мы создаем базовый класс, который может содержать один или несколько завершенных методов, но мы, по крайней мере, найдем один или несколько методов, которые остались незавершенными и объявлены абстрактными.

Если все методы абстрактного класса останутся незавершенными, это будет как интерфейс. Реальная цель абстрактного класса - предоставить определение базового класса для того, как набор производных классов будет работать, а затем позволить программистам заполнить реализацию в производных классах.

Мы также можем сказать, что цель абстрактного класса - предоставить определение базового класса.

Что такое интерфейс в C #?

С другой стороны, интерфейс - это не класс, который имеет только указание на функциональность. Мы можем назвать это шаблоном без реализации. Теоретически это только определение методов, в которых есть объявление членов.

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

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

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

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

Часто задаваемые вопросы (FAQ) об абстрактном классе и интерфейсе в C #

Какая польза от абстрактного класса в C #?

C # - это объектно-ориентированный язык программирования общего назначения. Это от Microsoft. Основная цель C # - использовать вычислительную мощность C ++ с простотой программирования Virtual Basic. Он в основном основан на C ++ и также содержит функции, аналогичные Java.

Абстрактный класс - это способ добиться абстракции в C #, и он не может быть создан напрямую. Функция абстрактного класса заключается в создании некоторой функциональности или общего поведения, которое подклассы могут наследовать, реализовывать или переопределять.

Он в основном предоставляет схему производных классов и дает инструкции о том, что реализовать производными классами, когда абстрактный класс наследуется ими.

Что такое интерфейс в C # и почему он используется?

Интерфейс в C # можно определить как определение типа, например как класс. Но он предоставляет только объявления и наследуется классами и структурами.

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

Он не может быть создан как объект и используется только как набор методов и объявлений свойств. Он определяет, какие операции могут или будут выполняться классом.

Что такое полиморфизм в C #?

Полиморфизм обычно выражается как один интерфейс и несколько функций. Полиморфизм в C # означает предоставление возможности принимать несколько форм. После инкапсуляции и наследования это еще одна основополагающая концепция объектно-ориентированного программирования. C # предоставляет возможность классам реализовывать различные методы, которые обычно вызываются с одним и тем же именем.

В C # есть два типа полиморфизмов:

Вывод

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

Хотя абстрактный класс - это определенный тип класса, который будет работать в качестве основы для других классов, интерфейс будет просто пустой оболочкой с объявлениями только членов.

использованная литература

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