加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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”布局(除非已经应用了StructLayoutAttribute以指定其他布局).

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

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

解决方法

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读