我试图了解C#新版本的新功能是如何工作的。实际上,当Visual Studio 2015推出时,它具有新功能,例如NULL Condition运算符(?)。当我使用它并将代码推送到guthub.all时,其他人使用了Visual Studio 2012而无法编译代码,因为编译器抱怨这个运算符。
我对此有三个问题。
问题1是 - 这是否意味着它在Visual Studio 2015中的新IDE识别它,即它依赖于IDE? IDE理解它并编译它用适当的代码替换它。它是.NET框架功能吗?
问题2是 - 这是否意味着,如果我使用不同的编辑器但使用相同的.NET框架它将无法工作。
问题3是 - 是否有新版本的C#依赖于.NET框架的新功能?如果不 ?从哪里获得这些功能?
请指导一下。这实际上有效。
答案 0 :(得分:0)
这三个问题很容易归纳为一个答案:它是编译器。
IDE提供生产力工具,如智能感知和语法检查器,以及许多其他方法,让您的生活更轻松。显然,如果在引入某些语言功能之前创建了IDE版本,则应将其视为语法错误。此外,较旧的IDE版本可以使用targeting packs来定位更大的.NET Framework / CLR版本。
其他语言功能只是语法糖,而其他功能则需要运行时(CLR)提供的某些服务。
答案 1 :(得分:0)
问题1是 - 这是否意味着它在Visual Studio 2015中的新IDE识别它,即它依赖于IDE? IDE理解它并编译它用适当的代码替换它。它是.NET框架功能吗?
较新的IDE主要针对较新的.NET框架和/或较新版本的语言(C#)。因此,如果下载代码的人员没有较新的IDE,则他们可能没有框架和/或IDE的新功能。好的,但如果他们安装了较新版本的框架呢?然后IDE可能不支持更新版本的框架。因此IDE需要能够支持更新版本的框架,并且必须在机器上安装更新版本的框架。语言也是如此。
问题2是 - 这是否意味着,如果我使用不同的编辑器但使用相同的.NET框架,它将无法工作。
记事本是一名编辑。因此,如果您在计算机上安装了所需的框架版本和所需的语言版本,并且您知道如何从命令行调用编译器并编译项目和/或解决方案,那么它应该可以工作。与第一个问题的答案相同:他们需要能够支持它。
问题3是 - 新版本的C#经常出现的新功能是否依赖于.NET框架?如果不 ?从哪里获得这些功能?
是和否。这取决于功能。例如,在VB.NET中,相等运算符是=
(一个等号)。如果语言设计者决定引入另一个运算符来进行相等性==
,那么他们可以在没有新的.NET框架的情况下执行此操作。在这种情况下,它将是VB.NET的更新版本,但它可以使用相同的旧版本的框架。
但是,有些情况下新的语言功能需要框架中的新功能,那么它将需要框架版本。这取决于语言设计者和框架设计者决定是否应该将语言纳入语言或框架中。例如,当.NET引入泛型集合时,它们可以使它只有C#支持泛型并将其构建到C#语言而不是框架中。但这并不是非常明智的,所以他们做出了正确的决定 - 现在我不是任何方式的编译专家所以不要引用我这个但你知道我想说的是什么。