0

如果我查看 .NET 类型System.Version的成员,创建值类型(C# 结构)而不是引用类型(类)可能是一个更好的主意。

Microsoft 决定以这种方式实现该类型的原因或论据可能是什么?它只是一种“错误”/错误/无关紧要还是“功能”(换句话说:“真正想要和有用”?

有像Parse()TryParse()这样的方法,它们是典型的值类型,例如System.Int32System.DoubleSystem.GuidSystem.Version的属性仅存储短值和整数值(s. System.TimeSpan),类型本身是可比较的(使用运算符)并且作为结构,可能不需要使其可克隆。

我对这种“现状”没有任何反对意见,只是为了满足我的好奇心;-)

编辑:添加了对System.TimeSpan的比较。

4

3 回答 3

2

我不能肯定地说,但一个原因可能是不变性。类中的属性Version都是只读的。尽管可以readonly在 struct 中声明字段,但 Eric Lippert 指出readonly 在 struct 字段上是一个谎言

使其成为一个类可确保不变性。

于 2011-10-12T20:39:51.493 回答
2

根据 Microsoft自己的指南,当实例至少为 16 字节时,您应该更喜欢类而不是结构。由于System.Version存储了四个 Int32,每个由四个字节组成,总共 16 个字节,因此他们按照自己的建议将其设为一个类。

于 2011-10-12T20:54:36.140 回答
1

与设计过程相关的另一点Version是 ComVisible。

因此,将其作为 coclass(行为,不保证内部布局)而不是作为 COM 结构(指定内存中的布局,如 C 结构)公开给 COM 更有意义。

于 2011-10-13T05:53:55.143 回答