![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
В книге Троелсена на стр. 148 описан полиморфизм для конкретного случая.
Т.е. этот тип полиморфизма, не связанный классическим наследованием. Так ли я это понял:
Заранее спасибо. --------------------
I'll be back ! |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Это вообще на полиморфизм не похоже. Просто названия методов одинаковые. Но если Троелсен говорит что это полиморфизм, значит так наверное и есть
-------------------- ![]() |
|||
|
||||
| ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Не, что-то ты не так понял :( Полиморфизм, ИМХО, не может быть реализован без наследования. Полиморфизм, это: 1) Подмена метода (свойства) базового класса наследником. 2) Создание ссылки базового типа, но на экземпляр наследника 3) Вызов, "типа" , метод базового класса, вместо которого, по настоящему, будет вызван метод наследника Нагляднее его пояснит пример:
Врядли Что-то я вообще не могу представить полиморфизм без наследования Это сообщение отредактировал(а) ivashkanet - 26.3.2007, 15:38 |
||||
|
|||||
| Дрон |
|
||||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Хмм.... Троелсена не читал. Сейчас вот почитал, что пишет википедия (там ещё есть и по-русски более простая статья) и понял так:
1. Параметрический полиморфизм -- это когда метод реализован одинаково для любого типа данных (т.е. для бесконечного множества типов). Например:
Но вообще с практической точки зрения смысла в этом маловато, так как совсем общих операций в C# определено всего четыре штуки. Можно, конечно, ограничить вариации типа T, написав:
Но, если я правильно понял, то это уже получается некий компромисс. Вроде как в этом случае полиморфизм "чистый", но поскольку каждый допустимый тип должен реализовать интерфейс ISomeInterface посредством ad-hoc полиморфизма. 2. Специфический (ad hoc) Это когда для каждого типа данных у нас есть свой собственный обработчик, но в то же время снаружи они выглядят одинаково. Например так:
Т.е. мы определили операции для конечного множества типов. И для каждого типа операция определяется своим специфичным образом. Кстати из примера видно, что наследование и полиморфизм не связаны Это сообщение отредактировал(а) Дрон - 26.3.2007, 18:01 -------------------- Да. Именно так. |
||||||
|
|||||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
г-н Троелсон вот что называет полиморфизмом конкретного случая в своем первом издании про C# ( в 3 я это не нашел , хотя не очень и искал
Представим , что у нас есть 3 независимых класса , которые реализуют скажем одинаковый метод HelloVingrad(). Это и называется полиморфизмом конкретного случая. Насколько я понял в C# это вообще смысла особого не имеет - он его не поддержвает
Троелсон же рассказал об этом просто для того , чтобы читатель знал о разных его разновидностях. Это сообщение отредактировал(а) nikitao - 26.3.2007, 18:27 -------------------- Жизнь - печальная штука. |
|||
|
||||
| Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
1) C классическим полиморфизмом для С# все понятно - именно его Троелсен приводит дальше в примере;
Это отметил ivashkanet. Спасибо 2) Обратил внимание, что специфический полиморфизм (ad hoc) напоминает перегрузку функций, т.е. функция та же, а тип параметров функции разный; 3) Если рассматривать полиморфизм методов (функций) исходя из определения polymorphism (много форм), то есть видимо и специфический его вид. То есть одна и та же функция ведет себя по-разному. --------------------
I'll be back ! |
|||
|
||||
| archeg |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 6.1.2007 Где: Киев Репутация: 11 Всего: 27 |
Почему же не имеет смысла?
-------------------- ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru) Дядька всегда можно спросить в аське, если не задалбывать - не откажет И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои ;) |
||||||
|
|||||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
archeg, насколько я понял - это классический вид полиморфизма , поскольку происходит наследование интерфейса.
-------------------- Жизнь - печальная штука. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |