C#和.NET版本是否互相依赖?

7

我刚开始学习C#和它与.NET的关系。如果我想利用最新的C#语言约定,但想针对.NET 2.0框架,我能做到吗?或者使用最新的C#意味着我必须使用最新的.NET吗?


@JustinHarvey,这是否意味着您无法将C# 6.0代码针对.NET 4.5 CLR进行目标定位?有关此声明的任何参考资料吗?据我所知,大多数C# 6的优势是通过编译器技术获得的。 - haim770
我预计C# 6的情况与C# 5类似:您可以编译C# 5以在2.0 CLR上运行:许多新的语言特性,如类型推断,是编译器改进。其他一些功能,例如使用动态或异步,确实需要更新的CLR或最新版本中不可用的库。 - realbart
对于那些想知道的人,通常我不需要针对2.0这样的东西,但我的项目是一个工具,可以在早期系统(如XP)上使用,因此它需要拥有最广泛的.NET配置文件受众。 - tralston
6个回答

7
作为一种语言,C#并不依赖于.NET框架。
例如:扩展方法是在C# 3.0中发布的一个功能,与.NET 2.0一起发布。扩展方法依赖于ExtensionAttribute,该属性位于"mscorlib.dll"中,而该文件是在.NET 3.5中添加的。但是,只要您在库本身中提供自己的ExtensionAttribute,就可以在.NET 2.0中使用扩展方法。它不需要在mscorlib中。请参考this question for more info
我们知道 是在C# 5.0中新推出的,随着 .Net 4.5一起发布,但是 我们可以在 .Net 4.0 中使用 async-await
同样地,大多数语言特性的依赖关系可以定义在你自己的程序集中以使其工作。因此,它不需要特定的 .Net 框架版本。

2
如果你将.NET框架看作是“CLR + 托管库”的组合,那么解释为什么新的框架版本会推出新功能(例如async/await)就更容易了。 - Yuval Itzchakov
那么这是否意味着任何新功能都可以被移植到.NET 2.0中,只要引用了适当的库?我假设在某些情况下,Visual Studio的版本确实很重要,因为它可以识别更新的语言约定(例如自动属性默认值)。 - tralston
@tralston 是的,几乎所有的东西都可以使用 .Net 2.0 实现,只要这些功能不需要 CLR 支持。新的 Visual Studio 支持是必须的,以理解新的关键字和特性,但如果你有耐心,你也可以在没有 Visual Studio 的情况下工作(只需使用命令行编译器)。 - Sriram Sakthivel
@SriramSakthivel 如果我想了解如何实现某个特定功能,您会指引我走哪个方向?比如说,如果我想要使用一个新的关键词或语法,我应该从哪里开始寻找? - tralston
1
@tralston 我经常使用反编译器(如IlSpy、Reflector)来查找实现。现在你可以在这里找到 .Net 的源代码(http://referencesource.microsoft.com/)。编译器的源代码在这里(https://github.com/dotnet/roslyn)。你可以找到关于你感兴趣的所有主题的博客,其中许多都涉及功能的内部实现。 - Sriram Sakthivel
@SriramSakthivel 哇,非常棒的答案! - tralston

0

您可以使用最新版本的Visual Studio(2013、2015)的功能,但是代码必须符合2.0规范,以便进行.NET 2.0编译(旧版本)。


0

是的,C#和.Net版本是相互依存的。据我所知,C#是一种使用.Net技术进行编程的语言。

学习C#意味着学习基本语法,在所有.Net版本中基本相同。因此,学习C#并不会受到你必须针对哪个.Net版本的影响。不同的.Net版本会增加某些新功能或功能。无论如何,最好了解最新的.Net版本,这将有助于您在项目中取得更好的效果。


2
你可以很愉快地编写C#应用程序,而完全不使用.NET。 - Sayse
是的,这是真的。但是在学习时最好了解 .net 的基础知识,不是吗? - NIDHIN MATHEW

0

0

C# 6.0 可在 .NET 5.0 中使用。 它依赖于 CLR。C# 4、4.5 和 4.5.1 使用的是 CLR 版本 4。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接