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

And*_*ews 5 .net c# optional-parameters c#-4.0

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

    public LoggingClient(string uri = "net.msmq://localhost/logging"){...}
Run Code Online (Sandbox Code Playgroud)

为什么?我什么也看不到在C#4规格(DOC版),第21.1节,是说,这应该是向后兼容.怎么没有编译错误?在某些情况下,这会无声地失败吗?

Han*_*ant 8

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

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