C#默认参数

C#默认参数,c#,.net,visual-studio-2010,optional-parameters,C#,.net,Visual Studio 2010,Optional Parameters,对于某些人来说,这可能是一个非常简单的答案。我有一个带有可选参数的方法,就像这样 public static Email From(string emailAddress, string name = "") { var email = new Email(); email.Message.From = new MailAddress(emailAddress, name); return email; } 现在,我必须以.NET

对于某些人来说,这可能是一个非常简单的答案。我有一个带有
可选参数的方法,就像这样

public static Email From(string emailAddress, string name = "")
    {
        var email = new Email();
        email.Message.From = new MailAddress(emailAddress, name);
        return email;
    }
现在,我必须以.NET3.5为目标,我的理解是,
可选参数
是.NET4的一部分。然而,我的项目构建了,我仔细检查了属性-应用程序页面,该页面将3.5作为目标框架。然后我在MSDN上找到一篇文章,说这是VS2010中C#4的一个特性。(MSDN文章-->)

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


谢谢。

VisualStudio2010附带了C#4.0,C#编译器可以理解可选参数。因此,是的,C#4.0语言定义与.NET4.0有所不同。我猜一个为.NET 3.5编译的带有可选参数的方法在使用例如VS 2008打开时将显示重载方法。自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/抵销差额:增加了C#4.0

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

语言版本独立于框架版本。对于C#来说,它们碰巧大部分是并行运行的,即C#4和framework 4.0随Visual Studio 2010一起出现。(但是没有3.5版本的C#)

与VB的版本号不同,因为VB7是第一个VB.NET版本。因此,VB10与Framework4.0同时出现


可选参数是C#4中引入的语言特性。当您使用VS2010时,您使用的是C#4,即使您的目标是framework 2.0,因此您可以使用所有C#4功能。

VS2010中是否有其他选项可以以相同的方式应用于.NET 3.5?IDE如何实现这一点?我一直在查看CSC文件,但找不到一个参数来指定要构建的版本。@Yuriy我对IDE的工作原理知之甚少,但至少在某些功能方面,IDE不关心您的目标框架,只会建议新功能。不,可选参数不会变形为重载方法-正如JaredPar所说,CLR从1.0开始就支持可选参数。除非您使用的功能需要2.0框架中不存在的类型。如果编译器找不到DLR类的实现,那么就不能使用“动态”作为示例。