C# CLR/编译问题

发布于 2024-11-16 02:03:24 字数 342 浏览 1 评论 0原文

我昨天发布了这个问题询问关于将 ASP.NET 应用程序部署到 .NET 3.5 目标服务器的 C# 4 客户端,以及服务器上的 C# 3 或客户端上的 C# 4 编译的内容。

该场景带有可选参数。我知道从 .NET 1.1 开始就支持可选参数。为什么 C# 3 编译的 IL 代码无法使用可选参数调用 C#4 编译的 IL 代码?

C# 3 是否只是忽略可选属性?

I posted this question yesterday asking about a C# 4 client deploying an ASP.NET application to a .NET 3.5 target server and weather C# 3 on the server compiled something or C# 4 on the client.

That scenario was with optional parameters. I know optional parameters have been supported since like .NET 1.1. Why is it that C# 3 compiled IL code is not be able to call C#4 compiled IL code using optional parameters?

Does C# 3 just ignore the optional attribute?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(3

一张白纸 2024-11-23 02:03:24

可选参数仅在 4.0 版本中引入到 C# 中。
(它们之前在 VB 的 .NET 中可用)。

Optional parameters were introduced to C# only in version 4.0.
(They were available in .NET earlier in VB).

命硬 2024-11-23 02:03:24

你是对的......IL只是用OptionalAttributes装饰,但它是调用编译器决定做什么......

来自Richter:

现在,当编译器发现您的代码调用缺少某些参数的方法时,编译器可以确保您省略了可选参数,从元数据中获取它们的默认值,然后嵌入它们...

所以它是 CALLING 编译器决定如何使用可选值,而不是调用的 c# 4.0 IL...

更多关于边缘情况以及如何决定值的调用方法可以从 Lippert, @ http://blogs .msdn.com/b/ericlippert/archive/2011/05/16/optional-argument-corner-cases-part- Three.aspx

You're right... The IL is just decorated w/ OptionalAttributes, but it's the calling compiler that decides what to do...

From Richter:

Now, when a compiler sees that you have code calling a method that is missing some arguments, the compiler can ensure that you've omitted optional argumements, grab their default values out of metadata, and embed them...

So it's the CALLING compiler deciding what to do w/ the optionals, not the called c# 4.0 IL...

More on edge cases and how it's the calling method that decides value can be found from Lippert, @ http://blogs.msdn.com/b/ericlippert/archive/2011/05/16/optional-argument-corner-cases-part-three.aspx

鸢与 2024-11-23 02:03:24

我的简单猜测是因为基类库不同?这使得 C# 3.* 和 4.* 之间的差异比 2.* 与 3.* 之间的差异大得多,因为后者使用相同的 BCL。

但不确定。

My simple guess would be because the Base Class Libraries are different? This makes the difference between C# 3.* and 4.* much bigger than say 2.* vs 3.* as the latter used the same BCL.

Not sure though.

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