在尝试确定 .NET 值类型中字段的精确顺序时,我查看了 ILDASM 树视图和 ILDASM“MetaInfo”(即实际的 IL)。数据的两个视图中的字段顺序是相反的。
例如,System.Runtime.InteropServices.FILETIME 的树视图在 dwLowDateTime 之前列出了 dwHighDateTime。(我会发布一张图片,但这里没有足够的声誉点来这样做)。
另一方面,这里是对应的IL,使用View>>MetaInfo>>Show!在 ILDASM 中:
类型定义 #1655 (02000678)
TypDefName: System.Runtime.InteropServices.FILETIME (02000678)
Flags : [Public] [SequentialLayout] [Class] [Sealed] [AnsiClass] [BeforeFieldInit] (00100109)
Extends : 02000009 [TypeDef] System.ValueType
Field #1 (04001e2e)
-------------------------------------------------------
Field Name: dwLowDateTime (04001E2E)
Flags : [Public] (00000006)
CallCnvntn: [FIELD]
Field type: I4
Field #2 (04001e2f)
-------------------------------------------------------
Field Name: dwHighDateTime (04001E2F)
Flags : [Public] (00000006)
CallCnvntn: [FIELD]
Field type: I4
...
哪个是正确的顺序?我认为 IL 是正确的,但需要确认。有谁知道这种差异的原因?