Необязательный код аргумента компилируется в .NET 3.5. Зачем? - PullRequest
5 голосов
/ 09 июля 2010

Этот фрагмент кода компилируется нормально в VS 2010 в проекте framework 3.5 (я проверял это трижды)

    public LoggingClient(string uri = "net.msmq://localhost/logging"){...}

Почему?Я ничего не вижу в спецификации C # 4 ( версия документа ), раздел 21.1, где говорится, что это должно быть обратно совместимо.Как получилось, что я не получил ошибку компиляции?Будет ли это молчаливо при некоторых обстоятельствах?

Ответы [ 2 ]

8 голосов
/ 09 июля 2010

Проект + Свойства, вкладка «Построение», прокрутка вниз, «Дополнительно».Вы можете изменить языковую версию на «C # 3.0», если предпочитаете поддерживать совместимость исходного кода.

Но да, вы используете компилятор C # 4.0 в VS2010, независимо от используемой целевой версии .NET.Вывод компилятора IL не изменился в .NET 4.0.Нет, вы не можете использовать dynamic , для этого требуется сборка поддержки только для .NET 4.0 (Microsoft.CSharp.dll)

3 голосов
/ 09 июля 2010

Необязательные параметры являются просто синтаксическим сахаром - если вы не укажете его на сайте вызовов, компилятор заполняет его значением по умолчанию. Нет никакой зависимости от самой платформы .NET, чтобы делать что-либо.

См. Также Можно ли использовать дополнительные параметры при таргетинге кода .NET 3.5?

...