|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
22.11.2011, 17:20 | #1 |
Очень суровый
Участник клуба
Регистрация: 17.12.2009
Сообщений: 1,988
|
Объясните смысл интерфейсов
Здравствуйте. Дочитываю Шилдта, но остается очень много неясностей. В частности - каков смысл интерфейсов?
Например возьмем код из MSDN: Код:
Код:
Код:
Ненавижу быть как все, но люблю, чтобы все были как я.
|
22.11.2011, 17:42 | #2 | ||
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Интерфейс — это просто набор соглашений. Если класс имплементирует IEquatable, он должен реализовать Equals(). Фактически, то же самое можно реализовать и через множественное наследование, но с интерфейсами получается удобней.
Из С# in a Nutshell: Цитата:
Цитата:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
||
22.11.2011, 17:51 | #3 |
Очень суровый
Участник клуба
Регистрация: 17.12.2009
Сообщений: 1,988
|
Спасибо! Более менее прояснилось.
Ненавижу быть как все, но люблю, чтобы все были как я.
|
22.11.2011, 17:57 | #4 | |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Цитата:
|
|
22.11.2011, 17:59 | #5 |
Дружите с Linq ;)
Форумчанин
Регистрация: 15.10.2008
Сообщений: 823
|
У тебя есть List разнородных объектов ( Машины, Помойка, Гаражи, Сарай, Отель). У них нет общих предков( кроме object, который наследуется неявно), но для всех надо сделать процедуру форматированного вывода названия объекта.. что делать? Писать огромные switch и смотреть приводиться ли объект к данному типу? Или сделать поддержку интерфейса iformattable во всех этих классах ,сделать преобразования объекта к этому интерфейсу и вызвать ToString? Допустим выбрали мы первый вариант, но у нас появились еще 20 разных сущностей..ии.. опять расширять switch?.. тогда, получается проще идти вторым вариантом и вообще ничего менять не надо будет. Без интерфейсов такую штуку можно сделать только с одним набором функций(отнаследоваться от одного класса). А что делать дальше? Если у нас два набора функций? .. Вот тогда-то и становиться понятно для чего это придумано. Интерфейс-шаг к унификации объектов. Т.е. они позволяют работать с разнородными объектами, как с одним. Кстати, недавно для себя открыл сериализацию..после дня мук получил хороший автосейв..)
Не давай организму поблажки, каждый день тренируй его в шашки..
|
22.11.2011, 18:17 | #6 |
Очень суровый
Участник клуба
Регистрация: 17.12.2009
Сообщений: 1,988
|
Код:
Остался еще один вопрос. Вот дан интерфейс: Код:
т.е. нельзя в классе вместо например: Код:
Код:
Ненавижу быть как все, но люблю, чтобы все были как я.
|
22.11.2011, 18:22 | #7 | |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
> Может, вы хотели сказать, с помощью абстрактного базового класса?
С помощью одних базовых абстрактных классов не всё можно сделать. Нужно или множественное наследование, или интерфейсы. В примере с животными это показано: Цитата:
Кстати, interface IEquatable<T> был введён в С# 2.0 для того, чтобы уменьшить накладные расходы на boxing/unboxing при вызове object.Equals(), но это уже скорее технические подробности именно С#, мало относящиеся к теме.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 22.11.2011 в 18:29. |
|
22.11.2011, 18:37 | #8 | |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Цитата:
|
|
22.11.2011, 18:43 | #9 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Абстрактный базовый класс нельзя множественно наследовать. По крайней мере в С#. А так да, они похожи )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Использование интерфейсов .NET | dis | Общие вопросы .NET | 4 | 25.09.2010 19:54 |
Краткий смысл. В чем цель и смысл вашей жизни? | grenles | Свободное общение | 20 | 13.09.2010 07:13 |
Задача в Delphi. Объясните смысл! | Sianessa | Помощь студентам | 13 | 31.03.2009 22:11 |
Объясните, пожалуйста смысл строки - res=d.year > year ? -1: (d.year < year? 0:1) | Fynj | Помощь студентам | 2 | 17.12.2007 17:50 |