C# 是";ref return";CLR的语言特性或特性

C# 是";ref return";CLR的语言特性或特性,c#,.net,clr,C#,.net,Clr,在这个SO问题中:(以及web上的其他地方),我无法确定ref return何时被引入.NET框架。只是糖吗 我提出这个问题的原因是,我们的许多主机没有安装最新的.NET framework版本(仍在4.5.2上),我想知道这将如何影响CLR向后兼容性、运行时正确性和性能 另外,我在哪里可以找到旧的.NET framework如何处理向后兼容性的文档?C#6.0语言规范似乎没有涵盖这一点,也许我在某种程度上跳过了这一点?正如您链接到的答案中提到的那样,.NET CLR始终支持ref return

在这个SO问题中:(以及web上的其他地方),我无法确定
ref return
何时被引入.NET框架。只是糖吗

我提出这个问题的原因是,我们的许多主机没有安装最新的.NET framework版本(仍在4.5.2上),我想知道这将如何影响CLR向后兼容性、运行时正确性和性能


另外,我在哪里可以找到旧的.NET framework如何处理向后兼容性的文档?C#6.0语言规范似乎没有涵盖这一点,也许我在某种程度上跳过了这一点?

正如您链接到的答案中提到的那样,.NET CLR始终支持
ref return
s,只是C#和VB编译器不支持它

为参考返回值添加了C#7.0,并添加了VB 15


换句话说:目标系统上的.NET Framework版本无关紧要,开发系统上的编译器版本很重要。不需要向后兼容,因为如上所述,该功能从一开始就存在于.NET CLR中。

有趣的是,Eric的博客没有出现在我的搜索结果中。(埃里克的回答是facepalm)谢谢!这正是我所想的,但是关于“同样,正确地做这件事需要对CLR进行一些更改。现在CLR将ref返回方法视为合法但无法验证,因为我们没有检测这种情况的检测器:”?另一个你可能感兴趣的博客(在我的搜索中显示):@CamiloTerevinto:看来他们在C#编译器中实现了这个“检测器”:试图编译Eric在回答中提到的“有问题”示例代码会产生编译时错误:无法使用“Program.M1(ref int)”的结果,因为它可能会将参数“x”引用的变量暴露在其声明范围之外。在我引用的adamsitnik博客文章中:“但是,新的ref-locals特性怎么可能与传统的JIT一起工作呢?Microsoft是否发布了具有.NET framework改进功能的Windows修补程序?不C#特性(如ref参数、局部变量和返回值)只是使用CLR的现有特性(称为托管指针)。因此,要使用它,您只需使用Roslyn 2.0版本(Visual Studio 2017或Rider)的IDE,就可以将代码部署到客户端的旧虚拟机上,该虚拟机可能正在运行一些非常旧的.NET framework;)"