11

对于某人来说,这可能是一个非常简单的答案。我有一个Optional Parameter类似的方法;

public static Email From(string emailAddress, string name = "")
    {
        var email = new Email();
        email.Message.From = new MailAddress(emailAddress, name);
        return email;
    }

现在,我必须以 .Net 3.5 为目标,我的理解Optional Parameters是 .Net 4 的一部分。但是,我的项目已构建,我仔细检查了属性 - 应用程序页面,该页面将 3.5 作为目标框架。然后我在MSDN上找到一篇文章说这是VS2010中C#4的一个特性。(MSDN 文章 -->命名和可选参数

有人可以帮我澄清一下。C#4 不需要 .Net4?可选参数实际上是什么的一部分?

谢谢你。

4

4 回答 4

22

自 1.0 起,CLR 已支持可选参数。像 VB.Net 这样的语言从一开始就一直在使用它们。虽然第一个支持它们的 C# 版本是 4.0,但它仍然可以为 2.0 CLR 生成有效代码,而且事实上确实如此。因此,如果您的目标是 3.5 CLR(或 2.0、3.0 等...),您可以在 2010 年使用默认参数

这种类型的支持不限于默认参数。许多新的 C# 功能可以在旧版本的框架上使用,因为它们不依赖于 CLR 更改。以下是 CLR 2.0 及更高版本支持的更多内容

  • 命名参数:添加了 C# 4.0
  • Lambda 表达式:添加了 C# 3.0
  • 自动属性:添加了 C# 3.0
  • 扩展方法:添加了 C# 3.0
  • Co/Contra 差异:添加了 C# 4.0
于 2010-08-30T16:30:51.603 回答
5

如果你编译它并使用像 ILDASM 这样的工具检查输出,你会发现可选参数只是通过向描述方法的形式参数的元数据添加一个属性来实现的。只要该属性类在目标平台上可用,在下级平台上使用发出的代码应该没有问题。

于 2010-08-30T16:33:17.933 回答
2

语言版本独立于框架版本。对于 C#,它们碰巧大部分是并行运行的,即 Visual Studio 2010 附带的 C# 4 和框架 4.0。(但是没有 C# 的 3.5 版本。)

对于 VB,版本号是不同的,因为 VB 7 是第一个 VB.NET 版本。因此,VB 10 与框架 4.0 同时出现。

可选参数是 C# 4 中引入的语言特性。当你使用 VS 2010 时,你使用的是 C# 4,即使你的目标是 framework 2.0,所以你可以使用所有 C# 4 特性。

于 2010-08-30T16:36:27.673 回答
-1

C# 4.0 包含在 Visual Studio 2010 中,C# 编译器可以理解可选参数。所以是的,C# 4.0 语言定义与 .NET 4.0 不同。我猜一个为 .NET 3.5 编译的带有可选参数的方法在使用例如打开时会显示重载方法。对比 2008

于 2010-08-30T16:28:08.520 回答