| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Наследование UserControl |
| Автор: ProgerIv 2.10.2008, 18:54 |
| Такое дело, есть несколько экземпляров UserControl, каждый из которых содержит функцию одинакового вида (одинаковое описание функций), но содержимое в телах функций может отличаться, надо сделать так, чтобы можно было, не зная какой конкретно экземпляр мы имеем, выполнить ту функцию и получить результат. Догадываюсь что надо делать через интерфейсы, что-то с наследованием, но не представляю как конкретно. |
| Автор: gojanki 2.10.2008, 19:03 | ||
| Используй ключевое слово virtual в объявлении метода у базового класса, а в подклассах переписывай с помощью override. Затем через указатель базового класса вызывай этот метод. Это полиморфизм называется. Либо через интерфейс, реализуешь его во всех своих классах и затем через указатель на интерфейс вызваешь метод.
|
| Автор: diadiavova 3.10.2008, 01:45 |
| Честно говоря не совсем понятно, что надо. Идёт ли речь об экземплярах одного класса, или разных классов, произведённых от одного предка. Реализация будет отличаться. Если речь идёт всё-таки о разных классах, тогда это будет выглядеть так: Создаётся базовый класс который будет родителем для всех остальных контролов этого семейства, сам он производится от класса UserControl.Допустим мы создаём абстрактный класс, это позволит нам создать в нём абстрактные методы. В нём создаётся абстрактный метод нужного вида. После этого можно создавать сколько угодно производных классов и в них обязательно надо реализовывать этот метод(в каждом по-своему). Далее можно создавать переменные тип которых будет типом базового класса и передавать им экземпляры производных классов. При вызове вышеозначенного метода, в каждом экземпляре будет работать именно та его реализация, которая была описана в типе, к которому принадлежит данный экземпляр. Прочитав всё это вряд ли можно что-либо понять. Поэтому прилагаю небольшой проект. В нём есть базовый абстрактный класс MyControlBase, с абстрактным методом(без реализации) SetDefaultColor. В четырёх производных классах этот метод реализован по-разному. В каждом классе он присваивает свойству BackColor конрола значение специфичное для данного класса. В главной форме я разместил FlowLayoutPanel и кнопку. В коде создаётся массив типа MyControlBase с четырьмя элементами. В массив загружаются экземпляры производных от MyControlBase классов(то есть по сути они разнотипные, но легко грузятся в массив базового типа). После чего контролы загружаются на панель. В обработчике нажатия кнопки я перебираю элементы массива и вызываю у них вышеописанный метод. В результате все контролы перекрашиваются, но только в разные цвета(метод то реализован по-разному). |