C# 版本兼容性
我正在开发一个应用程序,其目标框架是版本 3.5。但是在查看代码时,我发现了一种使用默认参数的方法:
public void Contact(string name, string email, string phone, string phoneAreaCode = "")
{
//...
}
并且感到困惑。
语言特性与框架版本无关?两者之间的关系是什么?为什么上面的代码是可能的?
编辑:我在 VS2010 中创建了 2 个项目(一个类库和一个控制台),两个项目都针对 .NET 2.0 Framework。在类库中,我创建了一个带有可选字符串参数的方法。我在控制台应用程序中使用它没有任何问题,无论是否传递参数。这和VS2010有什么关系吗?你所说的“VS2010”是指C#编译器4.0吗?
I'm developing an application whose target framework is version 3.5. But while looking at the code, I found a method using default parameters:
public void Contact(string name, string email, string phone, string phoneAreaCode = "")
{
//...
}
and got confused.
The language features are independent of the framework version? What is the relation between both and why is this the code above possible?
EDIT: I have created 2 projects (a class library and a console) in VS2010, both tageting the .NET 2.0 Framework. On the class library, I've created a method with an optional string parameter. I've used it in the console app with no problems, with and without passing the parameter. Does this have anything to do with VS2010? And by "VS2010" you mean C# compiler 4.0?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
编译器会发出信息,但 3.5 运行时不使用它 - 它只是被忽略。
请参阅这篇博客文章,以及这些问题 - 一个,两个。
本质上,3.5 运行时看到的是这样的:
The compiler emits the information, but the 3.5 runtime doesn't use it - it just gets ignored.
See this blog post, and these SO questions - one, two.
In essence, the 3.5 runtime sees this:
语言功能取决于您使用的 Visual Studio 版本。 .Net 框架规定了您可以使用哪些 .Net 函数和类。
上面的代码之所以可行,是因为您使用的是 Visual Studio 2010。无论您的程序集面向哪个 .Net 版本,您都可以使用新代码编辑器的所有功能。但是,当您尝试在 .net 3.5 代码中使用 .net 4.0 类或函数时,您将收到编译器错误。
The language features are dependant on what version of Visual Studio you are using. The .Net Framework dictates what .Net functions and classes are available to you.
The code above is possible because you are using Visual Studio 2010. You can use all the features of the new code editor, regardless of what .Net version your assembly targets. But, the instant you try to use a .net 4.0 class or function in your .net 3.5 code, you will get a compiler error.
你必须使用VS2010...因为它支持它。
You must be using VS2010... because it supports it.