![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| dezmond06 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 26.3.2011 Репутация: нет Всего: нет |
Народ, не бейте сильно, если вопрос тупой или сто раз обсуждался, но нужна помощь.
В общем, по заданию есть такая конкретная ситуация: Обычная учебная задачка, есть класс самолетов, класс автобусов, наследующие самосозданный интерфейс Транспорт, надо с помощью генерика вывести список рейсов в datagridview. Буквально задание звучит так: "Создать класс-прототип для хранения и обработки экземпляров классов, наложить ограничение на параметр типа данных: тип-аргумент должен реализовывать интерфейс Транспорт ... Формирование и вывод списка авиарейсов до Лондона (использовать стандартную коллекцию ArrayList)" Вот основная процедура:
Здесь регэкспами из текста извлекаются рейсы, создаются экземпляры обобщенного класса, которым передается нужный тип и выводится в грид. В том то и дело, что ничего не выводится. Созданный интерфейс (ничего интересного):
Генерик:
Если вывожу через класс-обертку, то все выводится в штатном режиме, текст обертки не привожу - там ничего интересного, все поля - public. Текст классов автобус и самолет тоже не привожу, но там тоже все выводимые поля - public, как можно их вывести, почему грид не подхватывает их автоматом? Ведь генерику тип исправно передается, в отладчике смотрю - ArrayList коллекция restable создается и правильно заполняется. Есть мысли? |
||||||
|
|||||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
А что ты хочешь? В классе TransProtoType нет ни одного свойства. Дженерик тип это же не наслежник для конкретезирующих типов. Плюс еще классы TransProtoType<Bus> и TransProtoType<Plane> абсолютно разные типы между которыми нет ничего общего (про ковариантность иконтрвариантность в 4ой версии - отдельная тема). Вот и результат - пустой грид. Как вариант в твоем случае могу посоветовать отнаследовать сам TransProtoType от iTransport и в нем реализовать свойства которые будут делегировать вызовы экземпляру в поле inner.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| dezmond06 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 26.3.2011 Репутация: нет Всего: нет |
Вот сделал, как вы говорили, уже обрадовался. А тут такой страшный зверь выскакивает при попытке промотать грид:
![]() Вначале вроде в грид выводится, а если мотать вниз, то вот. Пишет, насколько я понял, несоответствие типов при доступе к полю inner по аксессору get. Явное приведение не работает. И еще, как вывести массив tickets из inner? А то на массиве он почему-то даже в отладчике вылетает, когда хочу посмотреть его содержимое в Locals. Вот код класса-дженерика:
Это сообщение отредактировал(а) dezmond06 - 26.5.2011, 09:49 |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
Ошибка да, как я и говорил классы TransProtoType<Bus> и TransProtoType<Plane> абсолютно разные типы, но я надеялся что грид как-нить разберется с этим.
Попробуй в гриде явно прописать колонки, то есть не AutoGenerateColumns = true, а вручную. PS: Вообще задача сама по себе странная. Наличие в ней дженерика не имеет смысла. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| dezmond06 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 26.3.2011 Репутация: нет Всего: нет |
Я, честно говоря, см не понимаю зачем это надо, какое-то глупое задание, но чисто технически это можно сделать?
Да, вы правы, если убрать ветку else и создавать только объекты одного типа, то все выводится без проблем. Значит, грид просто не может корректно вывести их одновременно, а как это можно обойти? Поясните как нужно вручную создать колонки для каждого типа. Он же сам создает их, подхватывая public-поля. Это сообщение отредактировал(а) dezmond06 - 27.5.2011, 08:56 |
|||
|
||||
| dezmond06 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 26.3.2011 Репутация: нет Всего: нет |
Проблема решилась заменой arraylist на List<iTransport> и наследованием генерика от List<iTransport>, грид теперь не плюется
Есть мысли какие? И как правильно вывести массив билетов в грид подскажите, плиз. |
|||
|
||||
| dezmond06 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 26.3.2011 Репутация: нет Всего: нет |
Вопрос еще актуален.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |