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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Распознавание классов 
V
    Опции темы
mr.Anderson
Дата 15.9.2009, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Возможно, объясню немного путано...
Ситуация такая. Есть общий класс "рыбка" (Fish), реализующий некоторые основные действия для рыбок. От него есть пара производных классов (щука и карась). Их смысл только в нескольких отличных друг от друга параметрах, поведение в общем одинаково у обоих и просто наследуется от исходного класса Fish. Также существует озеро, где эти рыбки живут и здравствуют. Озеро задано, естественно, прямоугольной сеткой. Причем, каждый элемент сетки содержит ссылку на объект Fish. При заполнении сетки в конкретные ячейки запихиваются либо new Pike() (щука), либо new Crucian() (карась), те самые производные классы.
Проблема в следующем. При проходе по сетке в определенной ситуации мне нужно точно знать, что за класс в данном элементе - щука или карась. Однако, метод типа
Код

if (_lake[x, y] is Pike)
{ ... }
else if (_lake[x, y] is Crucian)
{ ... }

Не работает, поскольку всегда истинным считается первое условие... Вот вопрос... Как мне организовать распознавание, какой именно класс лежит в данном элементе? У меня есть мысль, как обойти это. Но это будет именно обходной путь, а хотелось бы как-то "прямо" сделать. Есть прямой метод? Типа того, что я привел выше, но работающий?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Grok
Дата 15.9.2009, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



да, странно что is не работает, с интерфейсами все ок.... 

можно в класс рыбка ввести идентификатор, который будет соответственно разный у щуки и карася, и по нему уже определять класс....

Добавлено через 4 минуты и 41 секунду
а можно вместо базового класса использовать IFish  smile 
PM MAIL ICQ   Вверх
Экскалупатор
Дата 16.9.2009, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



"Библиотека классов платформы .NET Framework
Object..::.ToString - метод
....
Возвращает объект String, который представляет текущий объект Object. "

как я понимаю если у вас не переопределен метод ToString то запросив его можно получить название класса?
PM MAIL ICQ   Вверх
PashaPash
Дата 16.9.2009, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



mr.Anderson, должен работать и вариант с is. Если, конечно, Crucian не унаследован от Pike. Отладь до места, когда _lake[x, y] is Pike срабатывает на Crucian, и глянь тип _lake[x, y].

GrokЭкскалупатор, Object.GetType вполне нормально возвращает уникальный идентификатор типа - сам тип.


--------------------
PM MAIL WWW   Вверх
ДобренькийПапаша
Дата 16.9.2009, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Абсолютно согласен с PashaPash, должно работать. Видимо у Вас где-то, что-то не так)))


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
mr.Anderson
Дата 16.9.2009, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Был мой косяк. Всем спасибо) С is работает, как и должно было.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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