powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как преобразовать родительский класс в дочерний?
5 сообщений из 5, страница 1 из 1
Как преобразовать родительский класс в дочерний?
    #38018552
mischa897
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравсвуйте!

Код: c#
1.
2.
3.
class P {}
class A{} : P
List<P> list = new List<P>();



Код: c#
1.
2.
list.Add(new A);
f((A)list[0]); //не даёт: преобразование невозможно 


как это исправить?

пасиб
...
Рейтинг: 0 / 0
Как преобразовать родительский класс в дочерний?
    #38018566
mischa897
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
class A: P {}

описался, там так конечно)))
...
Рейтинг: 0 / 0
Как преобразовать родительский класс в дочерний?
    #38018588
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бряхня :) что пишет аглицкими буквами?
...
Рейтинг: 0 / 0
Как преобразовать родительский класс в дочерний?
    #38018628
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы и с примером ошиблись downcasting рученьками :)
http://www.codeproject.com/Articles/34105/Convert-Base-Type-to-Derived-Type
...
Рейтинг: 0 / 0
Как преобразовать родительский класс в дочерний?
    #38018946
Dualcore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mischa897,

В процедурке ожидается тип P. В list как раз они и хранятся. Ничего преобразовывать не надо.

А уже в самой процедурке можно проверить тип объекта, и преобразовать P в A.

Код: c#
1.
2.
3.
4.
if (a is A)
        {
            A temp = (A)a;
        }



Наоборот преобразовать не выйдет. Ведь в классе-наследнике могут быть добавлены новые поля, новый функционал, а память выделяется под тип класса-предка.

Можно написать свой конвертор из А в P, и явно его вызывать, тогда у компилятора не будет вопросов- разработчик берет на себя ответственность по преобразованию (если он решил, что оно возможно).


PS. Таких функций, с проверкой внутри них типа передаваемого объекта, можно избежать, при желании. Создайте виртуальную функцию f в классе P, и переопределите ее в классе A. После чего можете свободно заполнять список List<P> list объектами обоего типа, и просто вызывать метод f в цикле, тогда не придется делать проверки на тип, а каждый объект будет вызывать свою виртуальную функцию.

Могу порекомендовать почитать http://www.ozon.ru/context/detail/id/1308678/
Раздел 3, "Операторы типа switch"
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как преобразовать родительский класс в дочерний?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]