Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как избавиться от копипаста? 
:(
    Опции темы
Alek86
Дата 29.8.2007, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 1
Всего: 25



вопрос таков. есть у меня 2 контрола, в каждый из которых нужно добавить по одинаковой функции WndProc с абсолютно одинаковым содержимым. К примеру:

Код

    class GlassyLabel : Label {
        protected override void WndProc(ref System.Windows.Forms.Message m) {
            if (m.Msg == Globals.WM_NCHITTEST) m.Result = (IntPtr) Globals.HTTRANSPARENT;
            else base.WndProc(ref m);
        }
    }

и
Код

    class GlassyPictureBox : PictureBox {
        protected override void WndProc(ref System.Windows.Forms.Message m) {
            if (m.Msg == Globals.WM_NCHITTEST) m.Result = (IntPtr) Globals.HTTRANSPARENT;
            else base.WndProc(ref m);
        }
    }



есть ли на шарпе способ, как можно избавиться в таком случае от копипаста тела функций?


--------------------
user posted image    user posted image
PM MAIL   Вверх
SpaceSpace
Дата 29.8.2007, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



наследуй от базового класса с этой функцией, 
либо делегируй этот функционал другому классу


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
Alek86
Дата 29.8.2007, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 1
Всего: 25



да уж, про наследование я конкретно протупил.... smile

а что за делегирование? можно ссылку? что такое делегаты я представляю, но как их сюда применить...


--------------------
user posted image    user posted image
PM MAIL   Вверх
SpaceSpace
Дата 29.8.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



думаю наследование в данном случае оптимально.

я даже более извращенный способ придумал:
Создаеш статический метод.
и вызываеш его smile
вот и получается - написал 1 раз.
избыточность кода - 1 строка на каждый вызов.

при инаследовании - нет избыточности

а на делегирование можешь забить,
ты же получил ответ на свой вопрос


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
Alek86
Дата 29.8.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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 (БЕЗ КОПИПАСТА) представить не могу :(

может, это делегирование может помочь? или есть какой-то неведомый мне способ? smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
SpaceSpace
Дата 29.8.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



зато наследовать МНОГО интерфейсов никто не запрещает.

правда придется делать много копипаста... smile 




--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
Alek86
Дата 29.8.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 1
Всего: 25



Цитата(SpaceSpace @  29.8.2007,  14:52 Найти цитируемый пост)
правда придется делать много копипаста...  


как раз про это мои:

Цитата(Alek86 @  29.8.2007,  13:41 Найти цитируемый пост)
На С++ я могу представить, как это дело реализовать без копипаста (хотя и с проблемами множественного наследования). А вот как это сделать на C# или Java (БЕЗ КОПИПАСТА) представить не могу :(


и


Цитата(Alek86 @  29.8.2007,  13:41 Найти цитируемый пост)
может, это делегирование может помочь? или есть какой-то неведомый мне способ? 


smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
SpaceSpace
Дата 30.8.2007, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



пример, но тебе тоже не понравиться

но это всё-таки правильнее, чем извращаться.

Добавлено через 2 минуты и 45 секунд
там смысл в том, что используеш интерфейсы.
создаеш объект, реализуеш в нем интерфейс.
потом этот объект засовываешь в тот класс, в котором нужно множественное наследование.

это лучшее, с точки зрения проетирования, что мои знания могут тебе предложить.

Если понравилось, ставь плюс, не стесняюся smile 


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
Alek86
Дата 30.8.2007, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 1
Всего: 25



спасибо. от это ближе к ОНО smile

ибо как я позжее нормально подумал (и такое бывает) с помощью нормального наследования первую задачу решить нельзя

Это сообщение отредактировал(а) Alek86 - 30.8.2007, 07:21


--------------------
user posted image    user posted image
PM MAIL   Вверх
SpaceSpace
Дата 30.8.2007, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



на счет делегирования
приведенный выше паттерн множественного наследования в C#
как раз использует метод другого объекта,
по сути делегирует ему этот функционал


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
Alek86
Дата 5.9.2007, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 1
Всего: 25



спасибо


--------------------
user posted image    user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0619 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.