![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 04.05.2014
Сообщений: 2
|
![]()
Добрый день.
Есть коллекция<object>, которая содержит экземпляры различных классов,например мост, здание. У классов большая часть одинаковых полей (например материал, ширина), но есть и индивидуальные для класса. Проблема в следующем, мне нужно пройтись по коллекции экземпляров классов с помощью foreach , выполнить определенные действия и получить доступ к полям классов. Пройтись по элементам коллекции можно используя общий интерфейс для всех классов, но тогда мне придется в общем интерфейсе прописать абсолютно все поля классов, и реализовать в классах поля , которые к классу отношения не имеют. Не подскажите как выйти из ситуации? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
как вариант тест и приведение типов.
иной вариант через рефлексию. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 04.05.2014
Сообщений: 2
|
![]()
Если делать приведение типов то придется каждый элемент в коллекции сначала проверять относится ли он к определенному классу а только потом делать приведение типов. код будет большой, так как классов много.
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 04.05.2014
Сообщений: 5
|
![]()
Покажите ваш код. Думаю все проще чем вы думаете.
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
![]()
Одинаковые поля вынести в интерфейс, а остальные - по приведению типов. Кода все равно будет много раз классов много.
P.S. сам бы сделал на основе паттерна Visitor. Если осилите, то и вам советую
Благодарить в репутацию. Проклинать — туда же
![]() |
![]() |
![]() |
![]() |
#6 |
Регистрация: 04.05.2014
Сообщений: 5
|
![]()
Если классов не так много (до 10), то все можно проще сделать. Пройтись по всей коллекции с проверкой на то, какой тип на данной итерации, и через приведение типов работать с ним.
Код:
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ООП: доступ к полям наследника через предка | Khayzenberg | Общие вопросы Delphi | 23 | 05.04.2014 10:19 |
Через какую библиотеку можно получить доступ к COM объектам браузера | wanes101 | Win Api | 7 | 11.05.2013 10:11 |
Kак получить доступ к чужой веб-камере через интернет? | remont_it, | C++ Builder | 4 | 18.01.2013 15:55 |
Не получается получить значение из функции через указатель | Casper-SC | Общие вопросы C/C++ | 5 | 12.01.2012 06:32 |
Получить доступ к скринсейверу через реестр | Vask | Общие вопросы Delphi | 1 | 24.09.2008 21:12 |