可选的参数代码在.NET 3.5中编译。 为什么?

这段代码在VS 2010中的框架3.5项目中编译好(我三重检查了)

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

为什么? 我在C#4规范( doc版本 )第21.1节中没有看到任何内容,它说这应该是向后兼容的。 怎么没有编译错误? 在某些情况下,这会无声地失败吗?

项目+属性,构建选项卡,向下滚动,高级。 如果您希望保持源代码兼容性,可以将语言版本更改为“C#3.0”。

但是,无论您使用的是哪个目标.NET版本,都在VS2010中使用C#4.0编译器。 编译器的输出IL在.NET 4.0中没有改变。 不,你不能使用动态 ,它需要一个.NET 4.0只支持程序集(Microsoft.CSharp.dll)

可选参数只是语法糖 – 如果您没有在调用站点指定它,编译器会将其填入默认值。 .NET框架本身没有任何依赖性。

另请参阅在针对.NET 3.5的代码中使用可选参数吗?