c# – 为什么System.DateTime结构具有布局类型Auto?
发布时间:2020-12-15 18:02:48 所属栏目:百科 来源:网络整理
导读:struct System.DateTime 及其表单System.DateTimeOffset的结构布局类型设置为“Auto”.这可以看出: typeof(DateTime).IsAutoLayout /* true */ 要么: typeof(DateTime).StructLayoutAttribute.Value /* Auto */ 或者从IL中可以看出: .class public auto a
struct
System.DateTime 及其表单System.DateTimeOffset的结构布局类型设置为“Auto”.这可以看出:
typeof(DateTime).IsAutoLayout /* true */ 要么: typeof(DateTime).StructLayoutAttribute.Value /* Auto */ 或者从IL中可以看出: .class public auto ansi serializable sealed beforefieldinit System.DateTime ˉˉˉˉ 通常用C#编写的struct(即.NET值类型不是枚举)将具有“Sequential”布局(除非已经应用了 我搜索了一些常见的BCL程序集,而DateTime和DateTimeOffset是我在这个布局中发现的唯一公开的可见结构. 有没有人知道为什么DateTime有这个不寻常的结构布局? 解决方法
这将需要投机,这个决定是在很久以前,就在.NET 1.0发布之前. System.DateTime中的属性最多只是一个微型优化,在.NET代码中并不罕见.这有点合适,结构只有一个字段,所以布局永远不会有任何问题.内部CustomAttribute结构体的结构可能由同一个程序员完成.无论如何,非托管代码都不会看到它们.
System.DateTimeOffset的执行时间稍晚,几乎肯定是一个复制粘贴错误. 那个程序员已经离开了,CLR没有理由重新排列顺序版本的布局.当自动布局重新排列时,如果结构体包含足够大以适合另一个小字段的字段之间的填充,就会发生.不是DateTimeOffet的情况. 当您提交DateTimeOffset的反馈报告时,您有一些可能会让Microsoft上师注意这一点.这是错误的afaik.发布到connect.microsoft.com (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |