[英]Why is it not possible to use both readonly and fixed-size buffers in structs in C# 7.2
随着C#7.2的发布,现在能够拥有readonly
结构,在许多情况下可以提高性能。
对于我的一个结构,我使用固定大小的字节数组来实际保存数据。 然而,当我标志着struct
和字节数组场readonly
,C#编译器抱怨readonly
不是在球场上有效。 为什么我不能在struct
的字段上同时使用fixed
和readonly
?
readonly unsafe struct MyStruct {
readonly fixed byte _Value[6]; //The modifier 'readonly' is not valid for this item.
}
因为C#规范是这样说的(并且它总是如此,甚至在c#7.2之前)。 在18.7.1节中,名为“固定大小缓冲区声明”, fixed
缓冲区声明允许使用以下修饰符:
新
上市
保护
内部
私人的
不安全
这里没有readonly
。 如果你考虑它 - 它无论如何都没有多大意义,因为固定的缓冲区大小由指针表示,你不能重写对指针的写访问。 例如:
var s = new MyStruct();
byte* value = s._Value;
// how can you prevent writing to `byte*`?
C#文档从未明确说明这一点,所以我在这里进行推断。
一个简单的原因:C# 不需要您调用构造函数来初始化struct
。 您可以简单地声明它,然后为其所有公共成员分配值。 (在你问之前,是的,必须分配所有这些或者你会得到一个编译器错误。)
由于构造函数/ new
不是必需的,因此不允许使用readonly
变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.