Подтвердить что ты не робот

С# 4.0 и .Net 3.5

Итак, мы наконец получили VS2010 на некоторых станциях разработчиков на работе и можем использовать функции С# 4.0. Хотя большая часть того, что мы разрабатываем, по-прежнему будет нацелена на .Net 3.5.

Когда я запускаю новый проект и устанавливаю цель на .Net 3.5, он по-прежнему позволяет использовать С# 4.0, например динамический. Можете ли вы использовать функции С# 4.0 во время установки .net 3.5 и будут ли эти функции работать в средах, где .NET 4.0 недоступен?

Спасибо.

4b9b3361

Ответ 1

dynamic код не будет компилироваться, если вы настроите таргетинг на среду .NET 3.5.

Чтобы быть более понятным, компилятор позволит вам определить и назначить переменную dynamic, например:

dynamic x = 3;

Эта строка кода будет скомпилирована, поскольку dynamic просто компилируется до object в отношении типов. Но если вы затем попытаетесь сделать что-либо с этой переменной, как в:

Console.WriteLine(x);

... тогда компилятор должен был бы генерировать код для обнаружения/принуждения реального типа, чего он не может сделать; вы получите следующие ошибки компиляции:

  • Предопределенный тип "Microsoft.CSharp.RuntimeBinder.Binder" не определен или не импортирован
  • Невозможно найти один или несколько типов, необходимых для компиляции динамического выражения. Вам не хватает ссылки на файлы Microsoft.CSharp.dll и System.Core.dll?

Компилятор С# 4 опирается на DLR и, в частности, на сборку Microsoft.CSharp для всего, что связано с dynamic. Они недоступны в .NET 3.5. Таким образом, ответ отрицательный, вы не можете использовать dynamic при таргетинге Framework версии 3.5.