Есть ли список изменений для C # 4.0, которые работают в .Net 3.5? - PullRequest
23 голосов
/ 01 апреля 2010

В последнее время я видел много изменений в C # 4.0. Мне очень нравятся некоторые из них. Кроме того, я пока не хочу переходить на .Net 4.0 по соображениям совместимости.

Итак, есть ли полный список новых языковых возможностей C # 4.0, которые будут работать на .Net 3.5 или ниже?

Например, для параметров по умолчанию требуется .NET 4.0 CLR или они являются функцией компилятора? Можно использовать автоматические свойства (функция C # 3.0) и по-прежнему ориентироваться на .NET 2.0, поскольку для этого не требуется поддержка Framework, но не нужно использовать выражения LINQ, поскольку для этого требуется Framework 3.5.

Пожалуйста, не говорите: «Конечно, C # 4.0 не будет работать в .Net 3.5, потому что он старше»

Ответы [ 5 ]

31 голосов
/ 01 апреля 2010

Компилятор C # в 4.0 поставляется с новой функцией многоцелевого доступа. Короткая версия состоит в том, что он будет производить сборку с любой версией метаданных, присутствующей в ссылке, которая определяет System.Object (обычно mscorlib.dll). Это позволяет использовать его для компиляции сборок для 2.0 и 3.5, а также для различных версий Silverlight. Эта функция была введена для поддержки мультитаргетинга в Visual Studio 2010.

Следовательно, вы можете использовать компилятор C # 4.0 для компиляции сборок 3.5 и использовать любые функции C # 4, которые вам нужны, при условии, что нет особой зависимости от библиотек 4.0. Например, именованные аргументы и необязательные параметры будут работать нормально, потому что они не используют какие-либо возможности платформы 4.0. Динамический, однако, делает, и поэтому из коробки это не будет работать на 3.5.

Здесь есть пост об этом, который охватывает основы.

http://blogs.msdn.com/ed_maurer/archive/2010/03/31/multi-targeting-and-the-c-and-vb-compilers.aspx

Краткий список (из сообщения Эда):

  • именованные аргументы и необязательные параметры
  • некоторые улучшения синтаксиса COM (например, "опустить ref")
  • общая дисперсия

Вещи, которые не будут работать, включают в себя динамические и беспроигрышные (два наших самых больших в плане затрат времени на их реализацию). Первый требует поддержки фреймворка, а второй требует поддержки во время выполнения.

2 голосов
/ 01 апреля 2010

Это не список и не окончательный, но в качестве примера я просто создал новый проект VS2010 для .NET 3.5, успешно создал метод с параметрами по умолчанию и вызвал его с именованными аргументами, оба из которых являются Возможности C # 4.0.

2 голосов
/ 01 апреля 2010

Я знаю, что ковариация и контравариантность имели некоторую поддержку через аннотации IL + и - в параметрах типа в CLR 2.0. Не уверен насчет других функций, хотя.

0 голосов
/ 01 апреля 2010

Я думаю об изменениях в "старой" спецификации ... изменение lock не будет доступно, так как это требует новой перегрузки - но изменение "полевых событий" должно работать. Я должен проверить, что выдает компилятор; -p

И конечно же:

using System;
class Program
{
    public event EventHandler SomeHandler;
    static void Main() { }
}

получает аксессоры нового стиля; -p

0 голосов
/ 01 апреля 2010

Учитывая, что параметры по умолчанию уже были функцией VB.NET, возможно, что C # просто реализовал это на уровне компилятора. Однако команда CLR могла бы полностью реализовать новый способ.

Вы должны изменить свой вопрос, чтобы указать, "какие функции C # 4.0 являются изменениями компилятора, которые будут применяться к .NET 3.5 framework"

...