gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:57:25 25 4
gpt4 key购买 nike

结构System.DateTime及其堂兄 System.DateTimeOffset 将其结构布局类型设置为“自动”。这可以通过以下方式看到:

typeof(DateTime).IsAutoLayout    /* true */

或:

typeof(DateTime).StructLayoutAttribute.Value    /* Auto */

或者从声明的IL中可以看出:

.class public auto ansi serializable sealed beforefieldinit System.DateTime
¯¯¯¯

通常情况下,用 C# 编写的结构(即不是枚举的 .NET 值类型)将具有“顺序”布局(除非已应用 StructLayoutAttribute 来指定另一个布局)。

我搜索了一些常见的 BCL程序集,DateTimeDateTimeOffset 是我在这种布局中发现的唯一公开可见的结构。

有谁知道为什么 DateTime 有这种不寻常的结构布局?

最佳答案

这需要推测,这个决定是很久以前做出的,远在 .NET 1.0 发布之前。 System.DateTime 上的属性充其量只是微优化,在 .NET 代码中并不少见。这有点合适,该结构只有一个字段,因此布局从来没有任何问题。内部 CustomAttribute 结构的那些可能是由同一个程序员完成的。也没关系,非托管代码永远看不到它们。

System.DateTimeOffset 的那个是很晚才完成的,几乎可以肯定是一个复制粘贴错误。

那个程序员侥幸逃脱了,CLR 没有理由重新安排顺序版本的布局。当结构包含字段之间的填充大到足以容纳另一个小字段时,将使用自动布局重新排列。 DateTimeOffet 不是这种情况。

当您为 DateTimeOffset 提交反馈报告时,您很有可能会得到 Microsoft 专家的注意。这是错误的afaik。将其发布到 connect.microsoft.com

关于c# - 为什么 System.DateTime 结构具有布局类型 Auto?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21881554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com