Страницы

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

вторник, 10 декабря 2019 г.

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

#c_sharp


  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 будет фактический тип правой части
присваивания, приведения типов там не будет.
- но если взять шире, абстрактнее - то вот в чем мой вопрос?

Т.е ВОПРОС ПО ПРЕЖНЕМУ В ЦЕЛОМ ОСТАЕТСЯ ОТКРЫТЫМ.
    


Ответы

Ответ 1



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

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

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