Страницы

Поиск по вопросам

понедельник, 15 октября 2018 г.

Приведение типа к dynamic

dynamic instance = new Program();
- Это будет UpCust или DownCast?
Или как я догадываюсь - когда во время выполнения тип переменной instance будет меняться, то это будет динамическое приведение типов? -Т.е динамически в зависимости от того что в dynamic по ходу выполнения программы будет происходить то UpCust то DownCast?
UPD:
dynamic instance = new A;
.Хорошо, возьмем не Program и dynamic, а два класса А и Б и если Б дочерний от А и на строке и если вместо типа dynamic -тип будет тот же что и справа - то привидения не будет, не если в прцесе выполнения вместо dynamic будет например тип B, то это будет DownCast. Вот в чем моя мысль. просто может я не очень удачно взял пример кода с Program - т.к его не к чему приводить, поэтому для данного конкретного случая
dynamic instance = new Program();
Подсказали здравую мысль - У переменной instance будет фактический тип правой части присваивания, приведения типов там не будет. - но если взять шире, абстрактнее - то вот в чем мой вопрос?
Т.е ВОПРОС ПО ПРЕЖНЕМУ В ЦЕЛОМ ОСТАЕТСЯ ОТКРЫТЫМ.


Ответ

Тип dynamic является особым типом, не совпадающим с типом object. Он не является классом, и поэтому не участвует в иерархиях наследования: произвести класс от dynamic нельзя. Я не смог найти его непосредственный базовый тип в спецификации, но его базовым типом как минимум является object
Это означает, что конверсия из dynamic в другие типы и обратно не может являться ни up-, ни downcast'ом (за исключением типа object).
Какая же конверсия происходит при присвоении между dynamic и другими типами? Ответ на это можно найти в спецификации языка: это специальные динамические конверсии, описанные в разделах 6.1.8 (неявная, из другого типа в dynamic), и 6.2.6 (явная, из dynamic в другой тип).
Итак, ответ: это специальные динамические конверсии, не являющиеся ни up-, ни downcast'ом.

Комментариев нет:

Отправить комментарий