![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Чем интерфейсы отличаются от абстрактных классов?
Какая мне разница на какие вопросы они отвечают? ![]() |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Абстрактные классы. В отличие от обычных классов, экземпляры их не могут быть созданы. Вот и все отличия. Поэтому абстрактные классы не могут содержать конструкторов. В остальном - отличий нет.
Интерфейсы (в отличие от классов, как обычных. так и абстрактных) не могут содержать: - полей - констант - перегрузок операторов приведения типа - перегрузок арифметических операторов - вложенных типов Интерфейсы описывают только поведение сущности (что может делать объект, реализующий интерфейс, через свои методы, какие он может генерить события и через какие свойства он может рассказывать о себе) ![]() Классы же описывают как свое поведение, так и внутреннее состояние (чему равно в каждый отрезок времени каждое из полей класса) И еще: можно реализовать множественное наследование интерфейсов, но нельзя реализовать множественное наследование от абстрактных классов. Это сообщение отредактировал(а) tol05 - 8.8.2007, 15:57 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
0000 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.7.2006 Где: Нижний Новгород Репутация: 2 Всего: 5 |
интерфейс не описывает поведение
интерфейсы - это именованный набор сигнатур (названия методов, параметры и тип возвращаемого значения) только названия и все, без кода сделаны - для множественного наследования |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Elfet (Белый и Пушистый
![]() Отличия: 1) интерфейс не может содержать реализации (в отличии от абстрактоно класса). 2) Класс-предок может быть только один (в отличии от интерфейсов, которых может быть целый вагон). Если отрешиться от компьютера, то можно сказать следующее: Класс говорит о том "Кто/что такое этот объект", а интерфейс "Что он умеет делать" (как уже было сказано). Пример. Цепочка: "Абстрактный класс" Млекопетающие, наследник Человек показывает, что человек имеет те же свойства что и все млекопитающие: теплая кровь, рождается (а не вылупливается из яйца), для продолжения рода нужен и самец и самка, есть сердце, позвоночник, мозг, ... Интерфейс же говорит, что умеет делать этот экземпляр. Пример: "интерфейс" IВысшееОбразованиеСпециальностьПрограммист говорит, что чел "немножко" сечет в компьютерах и его можно брать на работу что-то-там набирать, отчеты, например. И ты ды ![]() Добавлено через 3 минуты и 16 секунд P.S. Elfet, а в какой книжке так толково объясняют? Там действительно довольно толково описали отличия. Мне понравилось. Именно такой стиль изложения я и люблю. Добавлено через 11 минут и 10 секунд Я приобщал товарища к абстрактным классам (что-то он черезчур увлекся интерфейсами) Просто интересное задание с наследованием и интерфейсами |
|||
|
||||
OLEG_NET |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 15.5.2007 Репутация: нет Всего: 1 |
И еще,если класс наследует абстрактный класс,то его методы определенные как абстрактные должны быть переопределены(в интерфейсе это необязательно ) .
|
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Я не знаю. Это мы просто с другом обсуждали, это он цитировал. Спрошу у него ![]() Как я понял интерфейсы и классы сделаны для более понятной структуры кода? Думую можно было бы их объеденить - ничего особо страшного не случилось бы? |
|||
|
||||
mihryak |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
Во многом повторю вышесказанное ![]() И как бы тогда выглядел гибрид? Одно из важнейших отличий - интерфейс на то и интерфейс, чтобы все объявленные свойства и методы торчали наружу, только public, другие модификаторы доступа невозможны. От множественного наследования классов в .Нет разумно отказались (хотя пару раз приходилось немного расстраиваться по этому поводу - при невозможности изменить базовый класс и желании сделать его MarshalByRef), тут интерфейсы приходят на помощь. В декларации, которой является интерфейс, странно было бы видеть уже готовую реализацию некоторых вещей и задействованные в них приватные поля. Да, собственно, абстрактный класс ничем не отличается от обычного, за тем исключением, что его нельзя инстанцировать, и некоторые методы-свойства он отдал на откуп потомкам. Это сообщение отредактировал(а) mihryak - 9.8.2007, 00:44 |
|||
|
||||
ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Нет, для упрощения жизни програмиста -- чтобы он не писал код дважды (классы) и не заморачивался в тонкостях, когда ему нужно что-то конкретное (интерфейсы).
Не думаю ![]() Точно ;-) ![]()
Тут подходит агрегация. Просто создай класс-контейнер или оболочку для твоего класса и будет все пучком ;-) |
||||||
|
|||||||
mihryak |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
||||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
![]() Кстати, mihryak, где-то я читал, что твоя проблема --- одна из основных причин введения множественного наследования. Но траблы при неправильном использовании превышают все его приемущества. |
|||
|
||||
Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
В классе реализующем интерфейс тоже обязательно имплементировать все методы. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
OLEG_NET |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 15.5.2007 Репутация: нет Всего: 1 |
Naum,согласен сморозил
![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |