我正在将用C++编写的库翻译成C#,关键字"union"只存在一次.在结构中.
将它翻译成C#的正确方法是什么?它做了什么?它看起来像这样;
struct Foo {
float bar;
union {
int killroy;
float fubar;
} as;
}
Run Code Online (Sandbox Code Playgroud) 假设我想要一个7字节(或3或777)的值类型.
我可以这样定义:
public struct Buffer71
{
public byte b0;
public byte b1;
public byte b2;
public byte b3;
public byte b4;
public byte b5;
public byte b6;
}
Run Code Online (Sandbox Code Playgroud)
定义它的一种更简单的方法是使用固定缓冲区
public struct Buffer72
{
public unsafe fixed byte bs[7];
}
Run Code Online (Sandbox Code Playgroud)
当然第二个定义更简单.问题在于必须为固定缓冲区提供unsafe关键字.我知道这是使用指针实现的,因此不安全.
我的问题是为什么它必须是不安全的?为什么C#不能提供任意常量长度数组并将它们保存为值类型而不是使其成为C#引用类型数组或不安全缓冲区?