奇怪的结构行为

时间:2015-09-26 11:23:55

标签: c# struct

我写了一个小代码片段来演示这个问题。 问题是,当我声明一个具有<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <pre id="json"></pre>状态的结构时, 它根据另一个值为该结构的字段分配一个未定义的值。 仅在使用Layout.Explicit状态时才会出现此问题。 没有代码就很难解释,所以这里有一个简短的样本。

Layout.Explicit

任何人都可以向我解释为什么会这样。 使用VS 2013。 感谢。

1 个答案:

答案 0 :(得分:8)

  

看起来uu的值取决于分配给dbl的值

是的。因为你给了它们相同的偏移量,它们在内存中占据相同的位置(在结构内部)。

[FieldOffset(...)]允许您手动布局字段,并可以使它们重叠。一些非托管API需要这样做。

请注意,当您尝试使用引用字段(如字符串)重叠某些内容时,您将获得运行时异常。只有在仅使用值类型执行此操作时,才能维持内存安全。