在尝试确定.NET值类型中字段的精确顺序时,我查看了ILDASM树视图和ILDASM“MetaInfo”(即实际IL)。两个数据视图中的字段顺序是反向的。
例如,System.Runtime.InteropServices.FILETIME的树视图在dwLowDateTime之前列出了dwHighDateTime。 (我会张贴一张图片,但这里缺少足够的声望点。)
另一方面,这里是相应的IL,使用View>> MetaInfo>> Show!在ILDASM:
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是正确的,但是想要确认。有谁知道造成这种差异的原因?
答案 0 :(得分:0)
看起来Win32 FILETIME struct是小端(低端部分)。 .net版本是一个互操作结构,因此用于与本机代码交互,它几乎必须与本机代码兼容。
至于“差异”背后的原因,请注意“dwHighDateTime”按字母顺序排在“dwLowDateTime”之前。