当结构中显式布局的字段之一是对象时会发生什么

本文关键字:对象 什么 结构 布局 字段 | 更新日期: 2023-09-27 18:29:38

编辑:下面的所有内容都适用于Mono/Xamarin,但在.NET上因TypeLoadException而崩溃

当field2被打印到stdout时,每次运行程序时我都会得到一个新的整数。这个价值观的意义是什么?

class Program
{
    [StructLayout(LayoutKind.Explicit)]
    struct Data
    {
        [FieldOffset(0)]
        public object Field1;
        [FieldOffset(0)]
        public int Field2;
    }
    public static void Main()
    {
        var a = new Data();
        a.Field1 = new object();
        Console.WriteLine(a.Field2);
    }
}

当结构中显式布局的字段之一是对象时会发生什么

这是一个指针
IMO,您应该避免在显式布局的结构中使用引用类型字段