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

发布于 2024-09-08 17:39:26 字数 376 浏览 5 评论 0原文

这段代码在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一瞬间的火花 2024-09-15 17:39:26

项目+属性,构建选项卡,向下滚动,高级。如果您希望保持源代码兼容性,可以将语言版本更改为“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)

只是偏爱你 2024-09-15 17:39:26

可选参数只是语法糖 - 如果您没有在调用站点指定它,编译器会用默认值填充它。不依赖 .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?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文