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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование UserControl, Нужна помощь 
:(
    Опции темы
ProgerIv
Дата 2.10.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Такое дело, есть несколько экземпляров UserControl, каждый из которых содержит функцию одинакового вида (одинаковое описание функций), но содержимое в телах функций может отличаться, надо сделать так, чтобы можно было, не зная какой конкретно экземпляр мы имеем, выполнить ту функцию и получить результат. Догадываюсь что надо делать через интерфейсы, что-то с наследованием, но не представляю как конкретно.
PM MAIL   Вверх
gojanki
Дата 2.10.2008, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Используй ключевое слово virtual в объявлении метода у базового класса, а в подклассах переписывай с помощью override. Затем через указатель базового класса вызывай этот метод. Это полиморфизм называется.
Либо через интерфейс, реализуешь его во всех своих классах и затем через указатель на интерфейс вызваешь метод.

Код

IMyInterface myInterface = instanceOfYourUserControl;
myInterface.YourMethod();



PM MAIL   Вверх
diadiavova
Дата 3.10.2008, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Честно говоря не совсем понятно, что надо. Идёт ли речь об экземплярах одного класса, или разных классов, произведённых от одного предка. Реализация будет отличаться. Если речь идёт всё-таки о разных классах, тогда это будет выглядеть так:
Создаётся базовый класс который будет родителем для всех остальных контролов этого семейства, сам он производится  от класса UserControl.Допустим мы создаём абстрактный класс, это позволит нам создать в нём абстрактные методы. В нём создаётся абстрактный метод нужного вида. После этого можно создавать сколько угодно производных классов и в них обязательно надо реализовывать этот метод(в каждом по-своему). Далее можно создавать переменные тип которых будет типом базового класса и передавать им экземпляры производных классов. При вызове вышеозначенного метода, в каждом экземпляре будет работать именно та его реализация, которая была описана в типе, к которому принадлежит данный экземпляр.

Прочитав всё это вряд ли можно что-либо понять. Поэтому прилагаю небольшой проект.

В нём есть базовый абстрактный класс MyControlBase, с абстрактным методом(без реализации) SetDefaultColor. В четырёх производных классах этот метод реализован по-разному. В каждом классе он присваивает свойству BackColor конрола значение специфичное для данного класса.
В главной форме я разместил FlowLayoutPanel и кнопку. В коде создаётся массив типа MyControlBase с четырьмя элементами. В массив загружаются экземпляры производных от MyControlBase классов(то есть по сути они разнотипные, но легко грузятся в массив базового типа). После чего контролы загружаются на панель. В обработчике нажатия кнопки я перебираю элементы массива и вызываю у них вышеописанный метод. В результате все контролы перекрашиваются, но только в разные цвета(метод то реализован по-разному).



Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  AbstractMethodExample.zip 41,13 Kb


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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