为什么 ref 不能返回静态只读字段?



以下代码无法使用C# 7.0/Visual Studio 2017.2进行编译:

class C {
private static readonly int s = 5;
public static ref int Data => ref s;
}

是否有技术原因不允许对静态只读字段进行引用,或者这只是缺少的功能?

错误消息显示:

CS8162:无法通过引用返回静态只读字段。

因为它是readonly.

ref的要点是允许更改引用的变量,这将违反readonly

这在 C# 7.2 中是可能的。

class C {
private static readonly int s = 5;
public static ref readonly int Data => ref s;
}

您还不能返回对只读字段的引用,因为 ref 返回是可变的。但是,ref readonly功能计划用于 C# 的未来版本(目前为 C# 7.2 编写,但可能会更改)。

此功能可能会解决返回对只读字段的引用的能力,以及允许将ref参数标记为只读的问题,以保证该方法不会修改引用的值。

最新更新