using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace 创建联合类型的结构
{
//定义一个联合类型,其中能存储一个带符号的数值
[StructLayoutAttribute(LayoutKind.Explicit)]
struct SignedNumber
{
//利用FieldOffSet特性标记结构中的每个字段
[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类型
[StructLayoutAttribute(LayoutKind.Explicit)]
struct SignedNumberWithText
{
[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;
[FieldOffsetAttribute(16)]
public string Text1;
}
记录:
联合(union),作用和其他语言的联合一样。使用时要注意存储的和提取的数据类型是不是一样
注意偏移量,这个和博图里的变量设置偏移量一个道理,每个类型都要注意占多少位
由于StructLayoutAttribute 可以同时应用于结构和类,在创建联合数据类型时也可以使用类