如果我查看.NET类型System.Version的成员,最好创建一个类型为值类型(C#struct)而不是引用类型(类)。
微软决定以这种方式实施该类型的原因或理由是什么?它只是一种“错误”/错误/无关紧要或“特征”(换句话说:“真正想要和有用”?
有Parse()和TryParse()等方法,这些方法是值类型的典型方法,例如System.Int32,System.Double或System.Guid。 System.Version 的属性只存储短值和整数值(s。System.TimeSpan),类型本身具有可比性(与运算符)和struct可能没有必要使其可克隆
我没有任何反对这种“现状”的东西,只是为了满足我的好奇心; - )
编辑:已添加与 System.TimeSpan 的比较。
答案 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结构的内存中布局)更有意义。