Arm*_*her 76
您可以使用显式字段布局:
[StructLayout(LayoutKind.Explicit)]
public struct SampleUnion
{
[FieldOffset(0)] public float bar;
[FieldOffset(4)] public int killroy;
[FieldOffset(4)] public float fubar;
}
Run Code Online (Sandbox Code Playgroud)
未经测试.这个想法是两个变量在你的结构中具有相同的位置.你当然只能使用其中一个.
关于结构教程中的联合的更多信息
Ste*_*ows 22
如果不知道如何使用它,你无法真正决定如何处理它.如果它仅用于节省空间,那么您可以忽略它并只使用结构.
然而,这通常不是使用工会的原因.使用它们有两个常见的原因.一种是提供两种或更多种访问相同数据的方法.例如,int和4个字节数组的并集是分离出32位整数字节的一种(多种)方法.
另一种是结构中的数据来自外部源,例如网络数据包.通常,包含联合的结构的一个元素是一个ID,它告诉您联合的哪种风格有效.
在这两种情况下,你都不能盲目地忽略联合并将其转换为两个(或更多)字段不重合的结构.
在 C/C++ 中,联合用于覆盖同一内存位置中的不同成员,因此,如果您有一个 int 和一个 float 的联合,它们都使用相同的 4 字节内存来存储,显然写入一个会破坏另一个(因为int 和 float 有不同的位布局)。
在.Net 中,微软选择了更安全的选择,并且没有包含此功能。
编辑:除了互操作
归档时间: |
|
查看次数: |
41558 次 |
最近记录: |