最近我开始研究反射和引擎盖下的东西。今天我开始处理这些领域的“内部”。结果,我意识到字段是类,存储了它们的名称、类型、关于这个字段是什么的信息、FieldAttributes 枚举值、BindingFlags 枚举值、FieldHandle 等等等等,但是我找不到这个字段的值. 在字段中,也就是在FieldInfo中,字段本身的值在哪里?
最近我开始研究反射和引擎盖下的东西。今天我开始处理这些领域的“内部”。结果,我意识到字段是类,存储了它们的名称、类型、关于这个字段是什么的信息、FieldAttributes 枚举值、BindingFlags 枚举值、FieldHandle 等等等等,但是我找不到这个字段的值. 在字段中,也就是在FieldInfo中,字段本身的值在哪里?
字段本身存储在堆中,在对象结构内:
类.cs
内存转储 (x86)(4 字节对齐)
而这整个复杂的东西与其余的对象一起存储在一个堆中。
FieldInfo到某物并且Info仅包含有关字段位置的信息,即偏移量(偏移量从末尾开始计算Sync Block Index),在我们的例子中是0.当我们编写这样的代码时:
...它(最后一行)可以(大致)这样解释: