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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив объектов разных классов, наследуемых от одного общего 
:(
    Опции темы
Competitor
Дата 7.11.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я создал массив объектов типа ParentClass, где Class1, Class2 и Class3 - классы, наследуемые от ParentClass. 
Код

ParentClass[] Array ={new Class1(), new Class2(), new Class3()};

При обращении к каждому элементу следующим образом проблем нет, ведь этот метод переопределен в каждом классе.
Код

 for (int i = 0; i < Array.Count; i++)
                Array[i].VirtualMethod1();

Но почему не получается обращаться к членам классов, не определенных в базовом. Т.е. при следующем вызове компилятор выдает ошибку.
Код

Array[0].List1.Add(var1);

где List1 - член класса Class1. Как можно обратиться к нему приведенным выше способом?
PM MAIL WWW   Вверх
mr.DUDA
Дата 7.11.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Неявное преобразование работает от производного к базовому классу; обратное (от базового к производному) делается явно, оператором приведения as или круглыми скобками:
Код
((Class1)Array[0]).List1.Add ...



--------------------
user posted image
PM MAIL WWW   Вверх
Competitor
Дата 7.11.2006, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А как сделать так, чтобы не нужно было приводить тип?
PM MAIL WWW   Вверх
mr.DUDA
Дата 7.11.2006, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(Competitor @  7.11.2006,  15:53 Найти цитируемый пост)
А как сделать так, чтобы не нужно было приводить тип?

Сделать свойство List частью общего интерфейса, например добавить как абстрактное в ParentClass, и реализовать в наследниках.


--------------------
user posted image
PM MAIL WWW   Вверх
Competitor
Дата 7.11.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Что такое типизированный список? List - это типизированный список?
PM MAIL WWW   Вверх
mr.DUDA
Дата 7.11.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(Competitor @  7.11.2006,  16:32 Найти цитируемый пост)
Что такое типизированный список? List - это типизированный список?

Дженерик лист (List<ParentClass>)- да. ArrayList - нет.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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