1.带有union的结构体需要设置为LayoutKind.Explicit,手动定位每个变量的位移
2.union主要作用是节省空间,效果类似if-else的意思,例如音视频数据传输时可以选择放音频数据或是视频数据,则可以用union将这两个数据包括进来,其占用的空间是这两个数据中大的一个所用空间大小。
例子:
[StructLayoutAttribute(LayoutKind.Explicit)]
public struct MyContext
{
[FieldOffset(0)]
public int size;
[FieldOffset(4)]
public IntPtr pointer1;
//videoParam与audioParam对应C++中union{}中字段
[FieldOffset(8)]
public VideoParam videoParam;//此类型占用20
[FieldOffset(8)]
public AudioParam audioParam;//此类型占用16
//此处偏移为:8+上面两个字段类型占用空间最大值
[FieldOffset(28)]
public IntPtr pointer2;
}