CLR控制字段的布局

来源:互联网 发布:mt4行情交易软件 编辑:程序博客网 时间:2024/06/01 09:06

为了提高性能,CLR能按照它所选择的任何方式来排列类型的字段。为了向CLR发出指示,需要在定义的类或者结构上应用System.Runtime.InteropServices.StructLayoutAttribute属性。可以向这个属性的构造器传递LayoutKind.Auto,让CLR自动排列字段;或者传递LayoutKind.Sequential,让CLR保持我们的字段布局;或者传递LayoutKind.Explicit,并用偏移量在内存中显示地排列字段的顺序。在编程人员定义的类型上,如果不能显示地指定StructLayoutAttribute,编译器会选择它自己认为最好的布局。

 

C#编译器会默认为引用类型选择LayoutKind.Auto,默认为值类型选择LayoutKind.Sequential。

 

例如,

 


在一个类型中,一个引用类型和一个值类型互相重叠是非法的。在一个类型中,虽然允许多个引用类型在同一个起始偏移位置处相互重叠,但这是无法验证的。如果定义一个类型,并让其中的多个值类型相互重叠,则是合法的;不过,所有重叠的字节都必须能通过公共字段访问,使类型能够验证。一个字段假如在一个值类型中是私有的 ,但在另一个重叠的值类型中是公共的,类型就无法验证。

原创粉丝点击