![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| EuGenius_Krivbass |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 29.1.2007 Где: Кривбасс, Днепр Украина Репутация: нет Всего: нет |
В чем смысл полиморфизма и виртуальных функций?
Как это все работает, объяснять не надо. Объясните с практической точки зрения, где это применяется. Желательно с примерами. Согласен, вопрос глупый. Но что поделаешь, если интересно. |
|||
|
||||
| a_n_d_y |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 23.10.2006 Где: Ukraine::Kiev Репутация: нет Всего: 1 |
пример из MSDN
|
|||
|
||||
| EuGenius_Krivbass |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 29.1.2007 Где: Кривбасс, Днепр Украина Репутация: нет Всего: нет |
Я же вроде сказал, не нужно примеров, как это использовать. Объясни на пальцах, где это применяется. Например, упрощается использование плагинов... или че-то подобное. Вобщем таким образом.
|
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
EuGenius_Krivbass, например Форме все равно какой компонент на нее положили: кнопку, панель, текстбокс или грид.
Для нее все они являются объектами класса Control. Как же получается, что все они выглядят по-разному, реагируют на пользователя по-разному? Вот тут и включается полиморфизм и виртуальные функции. Форма вызывает метод Paint (это упрощенно, на самом деле механизм сложнее) элемента Control (а на самом деле это кнопка, например). Этот метод переопределён Кнопкой поэтому будет нарисована кнопка ... То же самое с обработкой событий и ты-ды. |
|||
|
||||
| EuGenius_Krivbass |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 29.1.2007 Где: Кривбасс, Днепр Украина Репутация: нет Всего: нет |
Уже немного понятно
|
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
EuGenius_Krivbass, что конкретно непонятно?
Практических примеров накидать можно много, но они ничем не будут отличаться от того. что я написал. |
|||
|
||||
| EuGenius_Krivbass |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 29.1.2007 Где: Кривбасс, Днепр Украина Репутация: нет Всего: нет |
Еще какой-нибудь примерчик
|
|||
|
||||
| a_n_d_y |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 23.10.2006 Где: Ukraine::Kiev Репутация: нет Всего: 1 |
ты б определился... |
||||
|
|||||
| EuGenius_Krivbass |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 29.1.2007 Где: Кривбасс, Днепр Украина Репутация: нет Всего: нет |
||||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 3 Всего: 149 |
Еще пример: 90% паттернов проектирования используют полиморфизм, даже более того, они на нем основаны!
|
|||
|
||||
| a_n_d_y |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 23.10.2006 Где: Ukraine::Kiev Репутация: нет Всего: 1 |
Считай - везде... Если его нету в какой-нибудь системе, реализованной средствами ОО-языка, то такая система скорее всего неверно спроектирована |
|||
|
||||
| lando1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 30.4.2007 Репутация: нет Всего: нет |
меня интересует следующее - "переопределить" можно и не virtual метод - с использованием new. В чем тут отличие от переопределения virtual метода?
|
|||
|
||||
| WERITAS |
|
|||
|
******** ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 2.5.2005 Где: Москва Репутация: 3 Всего: 5 |
Метод new - это по сути замещение родительского метода. А отличие в том, что если вы свой дочерний объект с замещенным с помощью слова new методом приведёте к указателю родительского класса и у указателя вызовете метод, то вызовется его родительская реализация (которая в классе-родителе) в отличие от переопределенного с помощью override метода, когда в таком же случае вызывается реализация дочернего класса -------------------- Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак" |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: нет Всего: 36 |
||||
|
||||
| sobik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 21.3.2008 Где: Киев, Украина. Репутация: 1 Всего: 1 |
Фишка виртаульных функций(ну и полиморфизма заодно) - в позднем связывнии. То есть, Вы не знаете, что придет юзеру в голову ввести, нету четких входных данных. И именно для этого пишеться куча виртуальных функций - что бы для разных данный применять "одинаковые"(точнее подобные) алгоритмы. Очень наглядный пример показал a_n_d_y, для разных геометрических тел и фигур - одинаковые функции, которые отличаються только формулой подсчета(в его примере,правда, больше ничего нету
Это сообщение отредактировал(а) sobik - 30.4.2008, 13:15 |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |