![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| JaguarSmith |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 16.1.2005 Репутация: нет Всего: 1 |
Привет!
Взялся написать класс который описывает древовидные структуры... и написал... описываются структуры примерно так
Дык вот... класс называется level (слово structure уже занято самим VB... : ) Если обьявить переменную этого класса то выражение типа
Является вполне допустимым и реально работает но если создать дочерний класс(даже пустой):
то на попытку сделать так:
.Net Framework ругается: Заданное приведение является недопустимым. Как это лечится? Или что я делаю не так? Это сообщение отредактировал(а) JaguarSmith - 19.1.2005, 02:06 |
||||||||
|
|||||||||
| Kurt |
|
|||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: нет Всего: 36 |
А метод в классе AnyStructure (к-й наследник) возвращает объект какого типа?
Меня терзают смутные сомнения, что все тот же level. Отсюда и несовпадение типов - Вы объекту класса AnyStructure присваиваете объект класса level. Или я не угадал? .. Пожалуйста, называйте топики соответственно тематике. Как написано в правилах форума, "название темы должно отбражать ее суть".. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
| JaguarSmith |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 16.1.2005 Репутация: нет Всего: 1 |
Да Kurt Вы абсолютно правы...
А как тогда правильно организовать наследование? Зы. но в пояснении к теме то я точно написал что меня интересует... на всяк случай привожу текст класса level
Это сообщение отредактировал(а) JaguarSmith - 19.1.2005, 03:10 |
|||
|
||||
| [Last]Wizard |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.7.2004 Где: Минск, Беларусь Репутация: 2 Всего: 10 |
Я так понял, что ты хочешь в одной древовидной структуре иметь узлы, относящиеся как к классу Level, так и к классу AnyStructure (а также других наследников).
В таком случае: В классе AnyStructure добавь функциональность, позволяющую добавлять узлы типа AnyStructyre; При обращении к дереву проверяй тип узла:
|
|||
|
||||
| JaguarSmith |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 16.1.2005 Репутация: нет Всего: 1 |
Не совсем...
Я хотел создать калсс level как базовый для описания всех обьектов имеющих древовидную структуру, например дерева каталога или структуры сайтов... Проблема в том, что каждый класс созданый на основе класса Level должен иметь свойство SubLevel относящееся к этому же классу а не к классу Level и я не очень понимаю как это реализовать не переопределяя свойство каждый раз заново(что ИМХО совсем неудобно)... Есть какие-нибудь варианты? Это сообщение отредактировал(а) JaguarSmith - 19.1.2005, 15:12 |
|||
|
||||
| [Last]Wizard |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.7.2004 Где: Минск, Беларусь Репутация: 2 Всего: 10 |
Есть такая идея: (поясню на примере)
1. Создаем универсальный интерфейс для элемента дерева:
2. Создаем абстрактный класс, где прячем нетипизирование методы интерфейса
3. Теперь плодим наследников от базового абстрактного класса, переопределяем нетипизированые методы типизироваными:
Получаем древовидную структуру, элементы которого относятся к одному и тому же типу, в то же время наследуются от одного и того же базового класса. Такой подход используется и в самом Framework. Например есть интерфейс IList, его реализует абстракный класс CollectionBase, в котором спрятаны нетипизированые методы интерфейса IList (Add, Remove, Contains, и др). От CollectionBase можно наследоваться, переопределяя заменяя нетипизированые методы типизироваными, и получается в итоге строго типизированая коллекция. |
||||||
|
|||||||
| JaguarSmith |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 16.1.2005 Репутация: нет Всего: 1 |
Огромное СПАСИБО тебе о добрый волшебник!!!
|
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 3 Всего: 59 |
Добавляу плус к репутации JaguarSmith. Молодец -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |