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

299
04 апреля 2017, 08:56
  dynamic instance = new Program(); 

- Это будет UpCust или DownCast?

Или как я догадываюсь - когда во время выполнения тип переменной instance будет меняться, то это будет динамическое приведение типов? -Т.е динамически в зависимости от того что в dynamic по ходу выполнения программы будет происходить то UpCust то DownCast?

UPD:

dynamic instance = new A;

и если вместо типа dynamic -тип будет тот же что и справа - то привидения не будет, не если в прцесе выполнения вместо dynamic будет например тип B, то это будет DownCast. Вот в чем моя мысль. просто может я не очень удачно взял пример кода с Program - т.к его не к чему приводить, поэтому для данного конкретного случая

 dynamic instance = new Program(); 

Подсказали здравую мысль - У переменной instance будет фактический тип правой части присваивания, приведения типов там не будет. - но если взять шире, абстрактнее - то вот в чем мой вопрос?

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

Answer 1

Тип dynamic является особым типом, не совпадающим с типом object. Он не является классом, и поэтому не участвует в иерархиях наследования: произвести класс от dynamic нельзя. Я не смог найти его непосредственный базовый тип в спецификации, но его базовым типом как минимум является object.

Это означает, что конверсия из dynamic в другие типы и обратно не может являться ни up-, ни downcast'ом (за исключением типа object).

Какая же конверсия происходит при присвоении между dynamic и другими типами? Ответ на это можно найти в спецификации языка: это специальные динамические конверсии, описанные в разделах 6.1.8 (неявная, из другого типа в dynamic), и 6.2.6 (явная, из dynamic в другой тип).

Итак, ответ: это специальные динамические конверсии, не являющиеся ни up-, ни downcast'ом.

READ ALSO
Как организовать очередь потоков

Как организовать очередь потоков

Очень нужна помощь, подскажите пожалуйста, как сделать последовательное выполнение методов, сломал себе уже всю голову

336
Блокируется UI при использовании async-await C#

Блокируется UI при использовании async-await C#

Есть форма с button и LabelПри нажатии на кнопку выполняется метод button1_Click:

301
Возможен ли асинхронный сервер RabbitMQ?

Возможен ли асинхронный сервер RabbitMQ?

Рассмотрел шаблон работы RabbitMQ(RPC) принцип работы описан тутКак я понял единственная возможность как то распараллелить обработку запросов...

260
Экземпляр класса в свойстве класса php

Экземпляр класса в свойстве класса php

Только начал изучать ООП на phpПоявилась необходимость создать класс для работы с файлами и архивами

264