![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
cthutq |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 16.4.2006 Репутация: нет Всего: нет |
есть базовый класс Base. От него унаследованы 2 класса A и B.
Есть список объектов А и список В. Я могу вабрать из любого списка любой объект и храню на него указатель. [CODE=C#] private Base base; ArrayList listA; ArrayList listB; // выбираем любой элемент base = listX[i]; [/CODE] 1. Как проверить что за объект base (А или В) 2. что будет с указателем, если этот элемент удален из списка. Будет ли равен ли он null, и если нет - как проверить его валидность ? |
|||
|
||||
reloni |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 10.5.2006 Где: Москва Репутация: 3 Всего: 4 |
Так можно узнать название базового класса:
Нулевую ссылку можно проверить так:
Но если ты сделал так: И потом удалил из списка этот элемент, то из списка он ессно пропадет, а вот Base будет попрежнему указывать на этот класс. |
||||||
|
|||||||
cthutq |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 16.4.2006 Репутация: нет Всего: нет |
3. Если Base это структура, с фиксированными полями
и А и В тоже структуры, то почему не получается унаследоваться
Добавлено @ 12:38
так вот как именно проверить вылидность - или только try/catch Это сообщение отредактировал(а) cthutq - 17.9.2006, 12:38 |
||||||
|
|||||||
reloni |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 10.5.2006 Где: Москва Репутация: 3 Всего: 4 |
Структуры не могут наследоваться друг от друга. Только реализовывать интерфейсы.
Не понимаю. Проверять, присутствует ли ссылка на твой класс в коллекции? Тогда самый простой вариант пробегать все элементы циклом и сравнивать ссылки, если что-то найдешь, значит она там есть, если нет, значит нет ![]() |
|||
|
||||
cthutq |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 16.4.2006 Репутация: нет Всего: нет |
не - мне нужно именно порожденный класс (dynamic_cast)- может это Name ? а может проще сразу узнать валидность - бегать слишком накладно |
|||
|
||||
reloni |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 10.5.2006 Где: Москва Репутация: 3 Всего: 4 |
||||
|
||||
cthutq |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 16.4.2006 Репутация: нет Всего: нет |
reloni, спасибо
но если я определяю их как классы, то говорит, что фиксированные поля могут пыть только у структуры короче палка о двух концах ![]() Добавлено @ 13:38 и еще - если указатель не типа Base, а типа Object - как тогда проверить каково он типа ? |
|||
|
||||
reloni |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 10.5.2006 Где: Москва Репутация: 3 Всего: 4 |
Хм, я имел ввиду, что Base это переменная, не важно какого типа.
Результатом будет вывод на экран имени класса, Object и MyClass соответственно. |
||||
|
|||||
cthutq |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 16.4.2006 Репутация: нет Всего: нет |
большое спасибо - с этим разобрался
Остался последний вопрос - как инициализировать базовый класс в конструкторе наследника ? |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
Это сообщение отредактировал(а) Void - 17.9.2006, 16:29 -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
reloni |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 10.5.2006 Где: Москва Репутация: 3 Всего: 4 |
Опять непонятно ![]() Когда вызывается конструктор класса наследника, то перед этим вызывается конструктор класса родителя. Т.е. если у тебя есть класс BaseClass и NewClass - его наследник, то конструктор по умолчанию для наследника выглядит так:
Что эквивалентно:
base() - означает вызов соотв. конструктора базового класса. Можно делать так:
Но тогда в базовом классе должен присутствовать соответствующий конструктор. Короче, при инициализации любого класса, вызываются поочередно конструкторы всех классов, от которых он унаследован. Советую купить эту книжку, там все подробно расписано по этому поводу. |
||||||||
|
|||||||||
cthutq |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 16.4.2006 Репутация: нет Всего: нет |
reloni, спасибо огромное
извини - но еще вопрос. т.к. есть указатель на элемент списка (А или В), а списки постоянно обновляются, то после обновления (сначала чиститься а потом заполняется) сам указатель указывает не на новый элемент списка, а на старый, который еще висит в памяти и его не убил сборщик мусора. Как добиться чтоб он был чисто указателем. Тоесть если умрет объект в списке, то и умер объект на который указывает указатель. |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
cthutq, см. класс System.WeakReference.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
cthutq |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 16.4.2006 Репутация: нет Всего: нет |
Void, то что нужно
![]() только не нашел есть ли у него operator = чтоб можно было бы их копировать |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
? -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |