![](/img/trans.png)
[英]Cannot implicitly convert type 'System.Version' to 'System.Net.HttpVersion'
[英]Why is the 'System.Version' a reference type (class) and not a value type (struct)?
如果我查看.NET类型System.Version的成员,最好创建一个值类型(C#结构)而不是引用类型(类)的类型。
Microsoft决定以这种方式实现该类型的原因或参数可能是什么? 它是一种简单的“错误” /错误/不足之处还是“功能”(换句话说:“真的想要和有用”)?
有一些类似Parse()和TryParse()的方法 ,这些方法通常用于值类型,例如System.Int32 , System.Double或System.Guid 。 System.Version的属性仅存储短和整数值(例如System.TimeSpan ),类型本身是可比较的(与运算符一起使用),并且作为结构,可能不需要使其可克隆。
我没有任何反对这种“现状”的东西,只是为了满足我的好奇心;-)
编辑:添加了对System.TimeSpan的比较。
我不能肯定地说,但是原因之一可能是不变性。 Version
类中的属性都是只读的。 尽管可以在结构中声明readonly
字段,但Eric Lippert指出, 在结构字段上只读是lie 。
将其设置为类可确保不变性。
根据Microsoft 自己的指南 ,当实例至少为16个字节时,您应该更喜欢类而不是结构。 由于System.Version
存储了四个Int32,每个Int32包含四个字节,总共16个字节,因此他们遵循自己的建议并将其设为一个类。
在设计过程中可能涉及的另一点是Version
是ComVisible。
这样,将它作为一个共类(行为,不保证内部布局)公开给COM而不是作为COM结构(它指定一个像C结构那样的内存布局)更有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.