Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
6 / 6 / 2
Регистрация: 06.12.2009
Сообщений: 51

Как избежать копипаста кода по разным классам? Объявить базовый?

17.02.2015, 11:22. Показов 1773. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Я сделал несколько наследников от контролов Devepress, заточенных под определенный проект. Наследовал следующим образом:
C#
1
public class EavTextEdit : DevExpress.XtraEditors.TextEdit
Затем решил сделать так, что бы контролы имели на форме подписи с автоматически загружаемым текстом. Объявил внутри класса экземпляр Label, закинул его на форму в нужном месте что бы он был рядом с основным контролом и действительно выглядел как подпись к нему. В общем, все работает как надо.
Но вот у меня несколько видов таких контролов. Допустим есть наследник от TextEdit и есть наследник от RadioGroup. Для TextEdit я реализовал нужный мне функционал и мне нужен точно такой же функционал для RadioGroup. Как его применить для RadioGroup кроме как скопировать код из TextEdit?
Быть может можно было бы объявить некий базовый класс (абстрактный?) и в нем реализовать нужный функционал. Но как тогда объявить мой класс что бы он был наследником этого базового класса и наследником уже определенного контрола (TextEdit, RadioGroup и т.д.) с учетом того, что в C# нет множественного наследования?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2015, 11:22
Ответы с готовыми решениями:

Обращение к разным классам из класса
Есть класс: <?php namespace app\controllers; class MainController{ public function index() { ...

Можно ли разным классам работать друг с другом минуя main?
Здравствуйте! На java пишу достаточно давно, но всё никак руки до ООП не доходили (всё в static методы засовывал). Следующее приложение...

Как объявить функцию, которая имеет место быть только в некоторых дочерних классах, а базовый класс абстрактный?
Как объявить функцию, которая имеет место быть только в некоторых дочерних классах? Например //Абстрактный базовый класс ...

8
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
17.02.2015, 11:42
использовать интерфейс, наследование тут ни как не поможет, ибо один контрол у тебя наследуется уже от TextEdit а другой от RadioGroup
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
17.02.2015, 11:50
troika, Композиция и агрегация!
0
6 / 6 / 2
Регистрация: 06.12.2009
Сообщений: 51
17.02.2015, 11:51  [ТС]
Цитата Сообщение от Metall_Version Посмотреть сообщение
использовать интерфейс, наследование тут ни как не поможет, ибо один контрол у тебя наследуется уже от TextEdit а другой от RadioGroup
Но интерфейс же никак на задает реализацию, код все равно придется копировать?
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
17.02.2015, 12:04
Цитата Сообщение от troika Посмотреть сообщение
Но интерфейс же никак на задает реализацию, код все равно придется копировать?
а он будет одинаковым для TextEdit и RadioGroup ?
подробней опишите.
0
6 / 6 / 2
Регистрация: 06.12.2009
Сообщений: 51
17.02.2015, 12:14  [ТС]
Цитата Сообщение от Metall_Version Посмотреть сообщение
а он будет одинаковым для TextEdit и RadioGroup ?
подробней опишите.
Да в том то и дело, что реализация подписи у всех видов контролов получается одинаковой и не хотелось бы копипастить код.
Цитата Сообщение от Cupko Посмотреть сообщение
Композиция и агрегация!
Т.е. как я понял, можно вообще сделать один контрол, в виде Panel например, и реализовать в нем логику какой конкретный едитор нужен (textbox, radiobutton) и ложить его на панель. А логику расположения подписи относительно едитора реализовывать уже в самом Panel?
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
17.02.2015, 12:16
Лучший ответ Сообщение было отмечено troika как решение

Решение

Цитата Сообщение от troika Посмотреть сообщение
Да в том то и дело, что реализация подписи у всех видов контролов получается одинаковой и не хотелось бы копипастить код.
значит это должно быть реализовано в классе родителе, если есть возможность.
иначе использовать агрегацию
1
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
17.02.2015, 12:23
Лучший ответ Сообщение было отмечено troika как решение

Решение

Цитата Сообщение от troika Посмотреть сообщение
Т.е. как я понял, можно вообще сделать один контрол, в виде Panel например, и реализовать в нем логику какой конкретный едитор нужен (textbox, radiobutton) и ложить его на панель. А логику расположения подписи относительно едитора реализовывать уже в самом Panel?
Как вариант. Конкретно по решению ничего сказать не могу, ибо надо вникнуть в суть задачи.
1
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
17.02.2015, 13:07
Цитата Сообщение от troika Посмотреть сообщение
Затем решил сделать так, что бы контролы имели на форме подписи с автоматически загружаемым текстом. Объявил внутри класса экземпляр Label, закинул его на форму в нужном месте что бы он был рядом с основным контролом и действительно выглядел как подпись к нему. В общем, все работает как надо.
А вы делайте наоборот - не лейбу объявляйте внутри класса, а при создании лейбы - передавайте ей Control к которому ей нужно привязаться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2015, 13:07
Помогаю со студенческими работами здесь

Как избежать дублирования кода?
Приветствую Вас уважаемые форумчане! Хочу обратиться к Вам за помощью. Возникли огромные пробелы в Java OOP , либо же я не до конца...

Как избежать дублирования кода в Си
Допустим, есть такие структуры данных: enum Color{ Red, Blue, Black, White }; struct Car{ char*...

Как избежать кода 404
Проблема следующая: Пытаюсь сроднить скрипт теста с CMS, вы скажете а причем здесь php? А вот как раз в нем все и дело... Так вот...

Как избежать дублирование кода ?
Ребят, подскажите, пожалуйста, верное направление. Прошу сильно не пинать. В окне есть 5 вкладок Tab с одинаковым контентом (все...

Как избежать повтороное выполнение кода?
При инициализации класса (__construct) выполняется определенный код (например, выборка дефолтных параметров из базы данных). Как избежать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru