重复问题: C++中的联合体在C#中的等价物
C#中是否有与C联合typedef相当的东西? 以下内容在C#中的等价物是什么?
typedef union byte_array
{
struct{byte byte1; byte byte2; byte byte3; byte byte4;};
struct{int int1; int int2;};
};byte_array
重复问题: C++中的联合体在C#中的等价物
C#中是否有与C联合typedef相当的东西? 以下内容在C#中的等价物是什么?
typedef union byte_array
{
struct{byte byte1; byte byte2; byte byte3; byte byte4;};
struct{int int1; int int2;};
};byte_array
C#不支持C/C++中union的概念。但是,您可以使用StructLayout(LayoutKind.Explicit)和FieldOffset属性来创建相同的功能。
请注意,这仅适用于像int和float这样的原始类型。
using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct byte_array
{
[FieldOffset(0)]
public byte byte1;
[FieldOffset(1)]
public byte byte2;
[FieldOffset(2)]
public byte byte3;
[FieldOffset(3)]
public byte byte4;
[FieldOffset(0)]
public short int1;
[FieldOffset(2)]
public short int2;
}
使用StructLayout
属性,代码看起来会像这样:
[StructLayout(LayoutKind.Explicit, Pack=1)]
public struct ByteArrayUnion
{
#region Byte Fields union
[FieldOffset(0)]
public byte Byte1;
[FieldOffset(1)]
public byte Byte2;
[FieldOffset(2)]
public byte Byte3;
[FieldOffset(3)]
public byte Byte4;
#endregion
#region Int Field union
[FieldOffset(0)]
public int Int1;
[FieldOffset(4)]
public int Int2;
#endregion
}
你的问题没有明确说明你的目的是什么。如果你想将数据编组到PInvoke中,那么上面的两个答案是正确的。
如果不是这样,那么你只需要:
class Foo
{
object bar;
public int Bar {get {return (int)bar; } }
...
}