| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > как избавиться от копипаста? |
| Автор: Alek86 29.8.2007, 07:33 | ||||
вопрос таков. есть у меня 2 контрола, в каждый из которых нужно добавить по одинаковой функции WndProc с абсолютно одинаковым содержимым. К примеру:
и
есть ли на шарпе способ, как можно избавиться в таком случае от копипаста тела функций? |
| Автор: SpaceSpace 29.8.2007, 08:07 |
| наследуй от базового класса с этой функцией, либо делегируй этот функционал другому классу |
| Автор: Alek86 29.8.2007, 08:15 |
| да уж, про наследование я конкретно протупил.... а что за делегирование? можно ссылку? что такое делегаты я представляю, но как их сюда применить... |
| Автор: SpaceSpace 29.8.2007, 13:11 |
| думаю наследование в данном случае оптимально. я даже более извращенный способ придумал: Создаеш статический метод. и вызываеш его вот и получается - написал 1 раз. избыточность кода - 1 строка на каждый вызов. при инаследовании - нет избыточности а на делегирование можешь забить, ты же получил ответ на свой вопрос |
| Автор: Alek86 29.8.2007, 13:41 |
| дело в том, что этот вопрос является частным случаем более извращенного и теоретического. Допустим, есть "классы" Bird, Horse, Lion и их потомки Pegasus, Manticore, и не существующий в мифологии Lihorse, причем на С++ их можно записать через множественное наследование примерно так (без сохранения синтаксиса): Pegasus : Bird, Horse Manticore : Bird, Lion Lihorse : Lion, Horse И такие есть у них функции Pegasus может летать как птица и скакать галопом, как конь Manticore может летать и рычать, как лев Lihorse : скакать и рычать На С++ я могу представить, как это дело реализовать без копипаста (хотя и с проблемами множественного наследования). А вот как это сделать на C# или Java (БЕЗ КОПИПАСТА) представить не могу :( может, это делегирование может помочь? или есть какой-то неведомый мне способ? |
| Автор: SpaceSpace 29.8.2007, 14:52 |
| зато наследовать МНОГО интерфейсов никто не запрещает. правда придется делать много копипаста... |
| Автор: SpaceSpace 30.8.2007, 07:12 |
| http://www.codeproject.com/cs/design/smip.asp но это всё-таки правильнее, чем извращаться. Добавлено через 2 минуты и 45 секунд там смысл в том, что используеш интерфейсы. создаеш объект, реализуеш в нем интерфейс. потом этот объект засовываешь в тот класс, в котором нужно множественное наследование. это лучшее, с точки зрения проетирования, что мои знания могут тебе предложить. Если понравилось, ставь плюс, не стесняюся |
| Автор: Alek86 30.8.2007, 07:18 |
| спасибо. от это ближе к ОНО ибо как я позжее нормально подумал (и такое бывает) с помощью нормального наследования первую задачу решить нельзя |
| Автор: SpaceSpace 30.8.2007, 11:05 |
| на счет делегирования приведенный выше паттерн множественного наследования в C# как раз использует метод другого объекта, по сути делегирует ему этот функционал |
| Автор: Alek86 5.9.2007, 10:50 |
| спасибо |