问题:
需要创建一种数据类型,其行为方式类似于C++中的联合类型。联合类型主要用于互操作场景,其中非托管代码接受和/或返回一个联合类型。(建议不要在其他情况下使用它)
解决方案:
使用一个结构,并用StructLayout特性标记他(在构造函数中指定LayoutKind.Explicit布局类型)。此外,利用FieldOffset特性标记结构中的每个字段。
下面的结构定义了一个联合类型,其中可以存储一个带符号数值。
using System.Runtime.InteropServices;
[StructLayoutAttribute(LayoutKind.Explicit)]
struct SignedNumber
{
[FieldOffsetAttribute(0)]
public sbyte Num1;
[FieldOffsetAttribute(0)]
public short Num2;
[FieldOffsetAttribute(0)]
public int Num3;
[FieldOffsetAttribute(0)]
public long Num4;
[FieldOffsetAttribute(0)]
public float Num5;
[FieldOffsetAttribute(0)]
public double Num6;
}
下一个结构类似于SignedNumber结构,不同之处是除了带符号的数值之外,它还可以包含String类型:
using Sys