@Streamline

Каковы причины возникновния интерфейсов в c#?

Всем привет
Вопрос в следующем - зачем в c# нужны интерфейсы? Если для CLR это своего рода абстрактные классы, и какой в них смысл если все ,что можно сделать с интерфейсом можно сделать и с абстрактным классом ?
интересно услышать ваше мнение
  • Вопрос задан
  • 2757 просмотров
Пригласить эксперта
Ответы на вопрос 5
haiku
@haiku
en.wikipedia.org/wiki/Class_%28computer_programmin...
Это должно помочь понять.

И
все ,что можно сделать с интерфейсом можно сделать и с абстрактным классом ?

- неправда. Класс не может унаследовать несколько абстрактных классов, но реализовывать множество интерфейсов - может. Точнее может унаследовать иерархию абстрактных классов, но не сразу несколько одновременно.
Ответ написан
@DancingOnWater
При создании C#, ровно как и Java основная задача - снижение прога входа, относительно С++

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

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

Итого, вопрос, которые в плюсах решается организационным образом в C# решен технически.
Ответ написан
Комментировать
@Oxoron
Шарпер
Помимо множественного наследования, интерфейсы позволяют создавать иерархии для структур. В Шарпе структуры запечатаны (sealed), и потому могут наследовать лишь от интерфейсов.
Ответ написан
Комментировать
@Dantilar
Так же мы можем сделать несколько реализаций интерфейса. Каждая реализация будет содержать свою логику, а потом там, где нам нужны будут методы из интерфейса - подставляем нужную реализацию для конкретной задачи.

Особенно это становится понятным при использовании внедрения зависимостей.
Ответ написан
Комментировать
@swadimaz
Самое главное в том, что интерфейсы позволяют отделить функциональность от реализации. То есть в отличие от абстрактных классов, которые могут содержать некую реализацию в членах, интерфейсы же представляют собой голый функциональность, читай: просто набор методов и пропертей для обращения к нему, и все. Никакой реализации. habrahabr.ru/post/30444
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы