c# – 为什么System.DateTime结构具有布局类型Auto?

前端之家收集整理的这篇文章主要介绍了c# – 为什么System.DateTime结构具有布局类型Auto?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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”布局(除非已经应用了StructLayoutAttribute以指定其他布局).

搜索了一些常见的BCL程序集,而DateTime和DateTimeOffset是我在这个布局中发现的唯一公开的可见结构.

有没有人知道为什么DateTime有这个不寻常的结构布局?

解决方法

这将需要投机,这个决定是在很久以前,就在.NET 1.0发布之前. System.DateTime中的属性最多只是一个微型优化,在.NET代码中并不罕见.这有点合适,结构只有一个字段,所以布局永远不会有任何问题.内部CustomAttribute结构体的结构可能由同一个程序员完成.无论如何,非托管代码都不会看到它们.

System.DateTimeOffset的执行时间稍晚,几乎肯定是一个复制粘贴错误.

那个程序员已经离开了,CLR没有理由重新排列顺序版本的布局.当自动布局重新排列时,如果结构体包含足够大以适合另一个小字段的字段之间的填充,就会发生.不是DateTimeOffet的情况.

当您提交DateTimeOffset的反馈报告时,您有一些可能会让Microsoft上师注意这一点.这是错误的afaik.发布到connect.microsoft.com

原文链接:https://www.f2er.com/csharp/97358.html

猜你在找的C#相关文章