为什么'System.Version'是引用类型(类)而不是值类型(struct)?

时间:2011-10-12 20:24:16

标签: .net types reference system.version

如果我查看.NET类型System.Version的成员,最好创建一个类型为值类型(C#struct)而不是引用类型(类)。

微软决定以这种方式实施该类型的原因或理由是什么?它只是一种“错误”/错误/无关紧要或“特征”(换句话说:“真正想要和有用”?

Parse()TryParse()等方法,这些方法是值类型的典型方法,例如System.Int32System.DoubleSystem.Guid System.Version 的属性只存储短值和整数值(s。System.TimeSpan),类型本身具有可比性(与运算符)和struct可能没有必要使其可克隆

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

编辑:已添加与 System.TimeSpan 的比较。

3 个答案:

答案 0 :(得分:2)

我不能肯定地说,但一个原因可能是不变性。 Version类中的属性都是只读的。虽然可以在结构中声明readonly字段,但Eric Lippert指出readonly on a struct field is a lie

使它成为一个班级确保不变性。

答案 1 :(得分:1)

根据Microsoft的own guidelines,当实例至少为16个字节时,您应该更喜欢类到结构。由于System.Version存储了四个Int32,每个Int32由四个字节组成,总共16个字节,因此它们遵循自己的建议并使其成为一个类。

答案 2 :(得分:1)

可能与设计过程相关的另一点是Version是可见的。

因此,将它作为一个coclass(行为,不保证内部布局)而不是COM结构(它指定像C结构的内存中布局)更有意义。