С учетом того, что динамические данные не являются строго типизированными, не проверяются на этапе компиляции, не имеют возможности запускать средство IntelliSense и не могут быть целью запроса LINQ, совершенно корректно предположить, что применение ключевого слова dynamic
Тем не менее, в редких обстоятельствах ключевое слово dynamic
dynamic может сэкономить время на наборе кода. Аналогично при разработке приложения .NET Core, которое должно взаимодействовать с унаследованными библиотеками СОМ (вроде тех, что входят в состав продуктов Microsoft Office), за счет использования ключевого слова dynamic можно значительно упростить кодовую базу. В качестве финального примера можно привести веб-приложения, построенные с применением ASP.NET Core: они часто используют тип ViewBag, к которому также допускается производить доступ в упрощенной манере с помощью ключевого слова dynamic.На заметку!
Взаимодействие с СОМ является строго парадигмой Windows и исключает межплатформенные возможности из вашего приложения.Как с любым "сокращением", прежде чем его использовать, необходимо взвесить все "за" и "против". Применение ключевого слова dynamic
dynamic необязательно. Тот же самый конечный результат можно получить, написав альтернативный код вручную (правда, обычно намного большего объема). Роль исполняющей среды динамического языка
Теперь, когда вы лучше понимаете сущность "динамических данных", давайте посмотрим, как их обрабатывать. Начиная с версии .NET 4.0, общеязыковая исполняющая среда (Common Language Runtime — CLR) получила дополняющую среду времени выполнения, которая называется
На заметку!
Хотя большая часть функциональных средств среды DLR была перенесена в .NET Core (начиная с версии 3.0), паритет в плане функциональности между DLR в .NET Core 5 и .NET 4.8 так и не был достигнут.Если у вас есть опыт работы со строго типизированными языками (включая C# без динамических типов), тогда идея такой исполняющей среды может показаться неподходящей. В конце концов, вы обычно хотите выявлять ошибки на этапе компиляции, а не во время выполнения, когда только возможно. Тем не менее, динамические языки и исполняющие среды предлагают ряд интересных средств, включая перечисленные ниже.
• Чрезвычайно гибкая кодовая база. Можно проводить рефакторинг кода, не внося многочисленных изменений в типы данных.
• Простой способ взаимодействия с разнообразными типами объектов, которые построены на разных платформах и языках программирования.
• Способ добавления или удаления членов типа в памяти во время выполнения.
Одна из задач среды DLR заключается в том, чтобы позволить различным динамическим языкам работать с исполняющей средой .NET Core и предоставлять им возможность взаимодействия с другим кодом .NET Core. Двумя популярными динамическими языками, которые используют DLR, являются IronPython и IronRuby. Указанные языки находятся в "динамической вселенной", где типы определяются целиком во время выполнения. К тому же данные языки имеют доступ ко всему богатству библиотек базовых классов .NET Core. А еще лучше то, что благодаря наличию ключевого слова dynamic их кодовые базы могут взаимодействовать с языком C# (и наоборот).
На заметку!
В настоящей главе вопросы применения среды DLR для интеграции с динамическими языками не обсуждаются.Роль деревьев выражений
Для описания динамического вызова в нейтральных терминах среда DLR использует
dynamic d = GetSomeData();
d.SuperMethod(12);