[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct RECT
        {
            public UInt32 left;
            public UInt32 top;
            public UInt32 right;
            public UInt32 bottom;
        }
程序里面有如上的一段代码,请问:
[StructLayout(LayoutKind.Sequential, Pack = 1)]  这条语句是什么意思?

解决方案 »

  1.   

    通过使用属性可以自定义结构在内存中的布局方式。例如,可以使用 StructLayout(LayoutKind.Explicit) 和 FieldOffset 属性创建在 C/C++ 中称为联合的布局。能不能具体解释一下?
      

  2.   

    StructLayout 用户可以控制类或结构的数据字段的物理布局
    其中第一个参数表示类或结构的排列方式
    包括Auto,Explicit,Sequential
    Sequential 表示在内存中排列是顺序的
    Pack = 1 是指的内存对齐方式,为一个字节对齐
      

  3.   


    在使用Explicit排列方式时需要同时使用FieldOffset 来指明变量在内存中的偏移量
    [StructLayout(LayoutKind.Explicit)]
    public class SYSTEM_INFO
    {
    [FieldOffset(0)] public ulong OemId;
    [FieldOffset(4)] public ulong PageSize;
    [FieldOffset(16)] public ulong ActiveProcessorMask;
    [FieldOffset(20)] public ulong NumberOfProcessors;
    [FieldOffset(24)] public ulong ProcessorType;
    }如果两个变量使用了同一个内存空间也就创建了在 C/C++ 中称为联合的布局
      

  4.   

    [StructLayout(LayoutKind.Sequential, Pack = 1)] 使用这个有什么实际的意义呢?
      

  5.   

    LayoutKind.Sequential在调用API经常会用到,就是让编绎器不要把定义的这个变量优化了,只要按照定义时候的顺序布制成员。
    Pack没接触过……