我认为LayoutKind.Sequential和LayoutKind.Explicit很清楚,但是如何通过C#处理LayoutKind.Auto?
答案 0 :(得分:4)
LayoutKind.Auto
只是意味着,“我授予CLR重新排序对应于这些字段的字节的权限”。它决定了如何重新组织字段的内存使用,打包等等。 文档没有指定它将发生的具体更改,可能是因为它是一个与编写结构无关的实现细节。
如果您传递给非托管代码,这总是一件坏事,因为非托管代码希望这些字段按特定顺序排列。他们可能的重新安排肯定会产生意想不到的后果。这就是为什么你不能将LayoutKind.Auto
结构体暴露给非托管代码。
答案 1 :(得分:1)
documentation似乎很清楚:
运行时会自动选择适当的布局 非托管内存中对象的成员。用这个定义的对象 枚举成员不能在托管代码之外公开。 尝试这样做会产生异常。
换句话说,布局是动态的,意味着您的对象不能再在托管代码之外使用。
答案 2 :(得分:1)
MS说here
公共语言运行库默认使用“自动”布局值。至 减少与Auto值相关的布局相关问题,C#, Visual Basic和C ++编译器为值指定顺序布局 类型。
答案 3 :(得分:0)