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

Есть ли список изменений для С# 4.0, работающих в .NET 3.5?

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

Итак, есть ли исчерпывающий список новых функций языка С# 4.0, которые будут работать на .Net 3.5 или ниже?

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

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

4b9b3361

Ответ 1

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

Поэтому вы можете использовать компилятор С# 4.0 для компиляции 3.5 сборок и использовать любые функции С# 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

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

И конечно:

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

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