C#默认参数

对于某人来说,这可能是一个非常简单的答案。 我有一个带有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? 什么是可选参数实际上是一部分?

谢谢。

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

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

  • 命名参数:添加了C#4.0
  • Lambda表达式:添加了C#3.0
  • 自动属性:添加了C#3.0
  • 扩展方法:添加C#3.0
  • Co / Contra Variance:添加了C#4.0

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

语言版本独立于框架版本。 对于C#,它们碰巧主要并行运行,即C#4和框架4.0随Visual Studio 2010一起提供。(但是没有3.5版本的C#。)

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

可选参数是C#4中引入的语言function。当您使用VS 2010时,即使您定位框架2.0,也使用C#4,因此您可以使用所有C#4function。

Visual Studio 2010附带了C#4.0,C#编译器了解可选参数。 所以是的,C#4.0语言定义与.NET 4.0不同。 我想一个为.NET 3.5编译的可选参数的方法将在打开时显示重载方法。 VS 2008