Параметры по умолчанию С#
Это, наверное, очень простой ответ для кого-то. У меня есть метод с Optional Parameter
следующим образом:
public static Email From(string emailAddress, string name = "")
{
var email = new Email();
email.Message.From = new MailAddress(emailAddress, name);
return email;
}
Теперь я должен настроить таргетинг на .Net 3.5, и я понял, что Optional Parameters
являются частью .Net 4. Однако мой проект строится, и я дважды проверил страницу Свойства - Приложение, которая гласит: 3.5 в качестве целевой структуры. Затем я нашел статью о MSDN, говорящую об этой функции С# 4 в VS2010. (Статья MSDN → Именованные и необязательные аргументы)
Может кто-то поможет прояснить это для меня. С# 4 не требует .Net4? Какие необязательные параметры на самом деле являются частью?
Спасибо.
Ответы
Ответ 1
Дополнительные параметры поддерживаются в среде CLR с 1.0. Языки, подобные VB.Net, используют их с самого начала. Хотя первая версия С# для поддержки их - 4.0, она все равно может генерировать действительный код для 2.0 CLR и на самом деле делает это. Следовательно, вы можете использовать параметры по умолчанию в 2010 году, если вы настроите таргетинг на CLR 3.5 (или 2.0, 3.0 и т.д.)
Этот тип поддержки не ограничивается параметрами по умолчанию. Многие новые функции С# могут использоваться в старой версии фреймворка, поскольку они не зависят от изменений CLR. Вот еще несколько, которые поддерживаются в версиях CLR версии 2.0 и выше
- Именованные аргументы: добавлен С# 4.0
- Лямбда-выражения: добавлен С# 3.0
- Авто Свойства: Добавлен С# 3.0
- Методы расширения: добавлен С# 3.0
- Co/Contra Variance: Добавлен С# 4.0
Ответ 2
Если вы скомпилируете это и просмотрите вывод с помощью инструмента, такого как ILDASM, вы увидите, что необязательный параметр просто реализуется путем добавления атрибута к метаданным, который описывает формальные параметры метода. Пока этот класс атрибутов доступен на целевой платформе, не должно быть проблем с использованием испущенного кода на платформе нижнего уровня.
Ответ 3
Языковая версия не зависит от версии фреймворка. Для С# они работают в основном параллельно, т.е. С# 4 и фреймворк 4.0 поставляются с Visual Studio 2010. (Однако нет версии 3.5 для С#.)
С VB номера версий различны, так как VB 7 была первой версией VB.NET. Таким образом, VB 10 поставляется одновременно с фреймворком 4.0.
Необязательные параметры - это языковая функция, введенная в С# 4. Когда вы используете VS 2010, вы используете С# 4, даже если вы нацеливаете фреймворк 2.0, поэтому вы можете использовать все возможности С# 4.
Ответ 4
С# 4.0 включен в Visual Studio 2010, а компилятор С# понимает необязательные параметры. Так что да, определение языка С# 4.0 отличается от .NET 4.0. Я предполагаю, что метод с дополнительными параметрами, скомпилированными для .NET 3.5, будет показывать перегруженные методы при открытии, например. VS 2008