![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Alek86 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 1 Всего: 25 |
вопрос таков. есть у меня 2 контрола, в каждый из которых нужно добавить по одинаковой функции WndProc с абсолютно одинаковым содержимым. К примеру:
и
есть ли на шарпе способ, как можно избавиться в таком случае от копипаста тела функций? |
||||
|
|||||
| SpaceSpace |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 10.4.2007 Где: Самара Репутация: нет Всего: 10 |
наследуй от базового класса с этой функцией,
либо делегируй этот функционал другому классу -------------------- Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение. 70-565 MCPD Enterprise 3.5 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 1 Всего: 25 |
да уж, про наследование я конкретно протупил....
а что за делегирование? можно ссылку? что такое делегаты я представляю, но как их сюда применить... |
|||
|
||||
| SpaceSpace |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 10.4.2007 Где: Самара Репутация: нет Всего: 10 |
думаю наследование в данном случае оптимально.
я даже более извращенный способ придумал: Создаеш статический метод. и вызываеш его вот и получается - написал 1 раз. избыточность кода - 1 строка на каждый вызов. при инаследовании - нет избыточности а на делегирование можешь забить, ты же получил ответ на свой вопрос -------------------- Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение. 70-565 MCPD Enterprise 3.5 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 1 Всего: 25 |
дело в том, что этот вопрос является частным случаем более извращенного и теоретического.
Допустим, есть "классы" Bird, Horse, Lion и их потомки Pegasus, Manticore, и не существующий в мифологии Lihorse, причем на С++ их можно записать через множественное наследование примерно так (без сохранения синтаксиса): Pegasus : Bird, Horse Manticore : Bird, Lion Lihorse : Lion, Horse И такие есть у них функции Pegasus может летать как птица и скакать галопом, как конь Manticore может летать и рычать, как лев Lihorse : скакать и рычать На С++ я могу представить, как это дело реализовать без копипаста (хотя и с проблемами множественного наследования). А вот как это сделать на C# или Java (БЕЗ КОПИПАСТА) представить не могу :( может, это делегирование может помочь? или есть какой-то неведомый мне способ? |
|||
|
||||
| SpaceSpace |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 10.4.2007 Где: Самара Репутация: нет Всего: 10 |
зато наследовать МНОГО интерфейсов никто не запрещает.
правда придется делать много копипаста... -------------------- Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение. 70-565 MCPD Enterprise 3.5 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 1 Всего: 25 |
как раз про это мои: и
|
|||
|
||||
| SpaceSpace |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 10.4.2007 Где: Самара Репутация: нет Всего: 10 |
пример, но тебе тоже не понравиться
но это всё-таки правильнее, чем извращаться. Добавлено через 2 минуты и 45 секунд там смысл в том, что используеш интерфейсы. создаеш объект, реализуеш в нем интерфейс. потом этот объект засовываешь в тот класс, в котором нужно множественное наследование. это лучшее, с точки зрения проетирования, что мои знания могут тебе предложить. Если понравилось, ставь плюс, не стесняюся -------------------- Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение. 70-565 MCPD Enterprise 3.5 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 1 Всего: 25 |
спасибо. от это ближе к ОНО
ибо как я позжее нормально подумал (и такое бывает) с помощью нормального наследования первую задачу решить нельзя Это сообщение отредактировал(а) Alek86 - 30.8.2007, 07:21 |
|||
|
||||
| SpaceSpace |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 10.4.2007 Где: Самара Репутация: нет Всего: 10 |
на счет делегирования
приведенный выше паттерн множественного наследования в C# как раз использует метод другого объекта, по сути делегирует ему этот функционал -------------------- Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение. 70-565 MCPD Enterprise 3.5 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 1 Всего: 25 |
спасибо
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |