可选参数代码在 .NET 3.5 中编译。为什么?
这段代码在 VS 2010 的框架 3.5 项目中编译正常(我三次检查过)
public LoggingClient(string uri = "net.msmq://localhost/logging"){...}
为什么?我在 C# 4 规范中看不到任何内容 (doc 版本),第 21.1 节,表示这应该向后兼容。我怎么没有编译错误?在某些情况下这会默默地失败吗?
This piece of code compiles OK in VS 2010 in a framework 3.5 project (I triple checked that)
public LoggingClient(string uri = "net.msmq://localhost/logging"){...}
Why? I see nothing in the C# 4 spec (doc version), section 21.1, that says this should be backwardly compatible. How is it that I get no compilation error? Will this fail silently in some circumstances?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
项目+属性,构建选项卡,向下滚动,高级。如果您希望保持源代码兼容性,可以将语言版本更改为“C# 3.0”。
但是,是的,无论您使用哪个目标 .NET 版本,您都在 VS2010 中使用 C# 4.0 编译器。编译器 IL 的输出在 .NET 4.0 中没有改变。不,您不能使用动态,它需要仅支持 .NET 4.0 的程序集 (Microsoft.CSharp.dll)
Project + Properties, Build tab, scroll down, Advanced. You can change the Language Version to "C# 3.0" if you prefer to maintain source code compatibility.
But yes, you are using the C# 4.0 compiler in VS2010, regardless of the target .NET version you use. The output of the compiler, IL, hasn't changed in .NET 4.0. No, you can't use dynamic, it requires a .NET 4.0 only support assembly (Microsoft.CSharp.dll)
可选参数只是语法糖 - 如果您没有在调用站点指定它,编译器会用默认值填充它。不依赖 .NET 框架本身来执行任何操作。
另请参阅您可以在代码定位中使用可选参数吗.NET 3.5?
Optional parameters are merely syntactic sugar - if you don't specify it at the call site, the compiler fills it the default value. There's no dependancy on the .NET framework itself to do anything.
See also Can you use optional parameters in code targeting .NET 3.5?