|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.07.2016, 16:31 | #1 |
Пользователь
Регистрация: 31.01.2016
Сообщений: 67
|
Generic Типы и двойной UpCast
всем привет, имеется следующий пример:
Код:
Код:
Итак, у нас сперва тип Container приводим к типу IContainer, а поле figure типа Circle приводится к типу Shape. Почему поле figure внутри класса Container приводится к типу Shape? итак мои предположения: 1) передаваемый в качестве аргумента экземпляр тут ни причем - т.к как уже было сказанно выше сам экземпляр никчему не приводится. 2)Из-за того, что тип Container мы привели к типу IContainer - тип Т у которого мы закрыли типом Shape - и отсюда возникает еще один вопрос: у нас одновременно происходит как бы два UpCast -а : Container - IContainer; Circle-Shape; - какой из них так скажем влияем на передаваемый аргумент конструктора - наш экземпляр circle (да-да, я знаю, что выше писал, что UpCast -a экземпляра circle не происходит - просто в предыдущем примере экземпляр приводится к типу Shape ) Код:
Моя догадка заключается в том, что раз мы тип Т у Container (Circle) - тот тип которого и аргумент конструктора circle - приводим к типу Т у IContainer(Shape), то и этот аргумент конструктора типа Circle также неявно UpCast - ится "следуя" изменениям своего типа - и соответственно затем произойдет UpCast типов внутри этого экземпляра в том числе и поля figure - которое изменит свой тип Circle на Shape. |
08.07.2016, 20:29 | #2 |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
тут просто наследование работает, и всё а дженерик или нет дело десятое
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Generic Типы и UpCast к базовому интерфейсному типу(ковариантность обобщений) | BadCats | C# (си шарп) | 2 | 21.06.2016 23:28 |
Generic C# | Sparky | Помощь студентам | 12 | 12.10.2012 20:32 |