![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| ProgerIv |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 19.8.2008 Репутация: нет Всего: нет |
Такое дело, есть несколько экземпляров UserControl, каждый из которых содержит функцию одинакового вида (одинаковое описание функций), но содержимое в телах функций может отличаться, надо сделать так, чтобы можно было, не зная какой конкретно экземпляр мы имеем, выполнить ту функцию и получить результат. Догадываюсь что надо делать через интерфейсы, что-то с наследованием, но не представляю как конкретно.
|
|||
|
||||
| gojanki |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 2.10.2008 Где: Архангельск Репутация: нет Всего: нет |
Используй ключевое слово virtual в объявлении метода у базового класса, а в подклассах переписывай с помощью override. Затем через указатель базового класса вызывай этот метод. Это полиморфизм называется.
Либо через интерфейс, реализуешь его во всех своих классах и затем через указатель на интерфейс вызваешь метод.
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Честно говоря не совсем понятно, что надо. Идёт ли речь об экземплярах одного класса, или разных классов, произведённых от одного предка. Реализация будет отличаться. Если речь идёт всё-таки о разных классах, тогда это будет выглядеть так:
Создаётся базовый класс который будет родителем для всех остальных контролов этого семейства, сам он производится от класса UserControl.Допустим мы создаём абстрактный класс, это позволит нам создать в нём абстрактные методы. В нём создаётся абстрактный метод нужного вида. После этого можно создавать сколько угодно производных классов и в них обязательно надо реализовывать этот метод(в каждом по-своему). Далее можно создавать переменные тип которых будет типом базового класса и передавать им экземпляры производных классов. При вызове вышеозначенного метода, в каждом экземпляре будет работать именно та его реализация, которая была описана в типе, к которому принадлежит данный экземпляр. Прочитав всё это вряд ли можно что-либо понять. Поэтому прилагаю небольшой проект. В нём есть базовый абстрактный класс MyControlBase, с абстрактным методом(без реализации) SetDefaultColor. В четырёх производных классах этот метод реализован по-разному. В каждом классе он присваивает свойству BackColor конрола значение специфичное для данного класса. В главной форме я разместил FlowLayoutPanel и кнопку. В коде создаётся массив типа MyControlBase с четырьмя элементами. В массив загружаются экземпляры производных от MyControlBase классов(то есть по сути они разнотипные, но легко грузятся в массив базового типа). После чего контролы загружаются на панель. В обработчике нажатия кнопки я перебираю элементы массива и вызываю у них вышеописанный метод. В результате все контролы перекрашиваются, но только в разные цвета(метод то реализован по-разному). Присоединённый файл ( Кол-во скачиваний: 4 )
AbstractMethodExample.zip 41,13 Kb-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |