【问题标题】:Is "ref return" a language feature or feature of the CLR“ref return”是 CLR 的语言特性还是特性
【发布时间】:2018-07-31 15:00:46
【问题描述】:

在这个 SO 问题中:Why doesn't C# support the return of reference(以及网络上的其他地方),我无法确定 ref return 何时被引入 .NET 框架。只是语法糖吗?

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

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

【问题讨论】:

    标签: c# .net clr


    【解决方案1】:

    正如您链接到的答案(以及blog entry this answer linked to)中提到的,.NET CLR 一直支持ref returns,只是 C# 和 VB 编译器不支持它。

    C# 7.0 添加了support 用于引用返回值,VB 15 添加了partial support

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

    【讨论】:

    • 有趣的是,Eric 的博客没有出现在我的搜索结果中。 (这在 Eric 的回答中,facepalm)谢谢!
    • 这正是我的想法,但是那段说“另外,正确地执行它需要对 CLR 进行一些更改。现在 CLR 将 ref-returning 方法视为合法但无法验证因为我们没有检测到这种情况的检测器:"?
    • 另一个您可能感兴趣的博客(出现在我的搜索中):adamsitnik.com/ref-returns-and-ref-locals
    • @CamiloTerevinto:看来他们在 C# 编译器中实现了这个“检测器”:尝试编译 Eric 在他的回答中提到的“有问题的”示例代码会产生编译时错误:不能在此上下文中使用“Program.M1(ref int)”的结果,因为它可能会将参数“x”引用的变量暴露在其声明范围之外。
    • 从我引用的 adamsitnik 博客文章中:“但是新的 ref locals 功能怎么可能与旧的 Jits 一起使用?微软是否发布了带有 .NET 框架改进的 Windows 补丁?没有!C# 功能像 ref 参数、locals 和 return 只是使用 CLR 的现有功能称为托管指针。因此,要使用它,您只需要带有 Roslyn 2.0 版本(Visual Studio 2017 或 Rider)的 IDE,您可以将代码部署到客户的旧虚拟机这可能与一些非常旧的 .NET 框架一起运行 ;)"
    猜你喜欢
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 2023-03-06
    • 2012-06-15
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多