我认为LayoutKind.Sequential和LayoutKind.Explicit很清楚,但是C#如何处理LayoutKind.Auto?

最佳答案

LayoutKind.Auto的意思是,“我授予CLR许可以重新排序与这些字段相对应的字节”。它确切地决定了如何重新组织这些字段以进行内存使用,打包等操作。该文档没有指定要进行的更改,可能是因为它是一个实现细节,与您编写结构的方式无关。

如果要传递给非托管代码,这总是不好的事情,因为非托管代码希望这些字段按特定顺序排列。它们可能的重新排列注定会带来意想不到的后果。这就是为什么您不能将LayoutKind.Auto结构公开给非托管代码的原因。

10-08 11:35