繁体   English   中英

为什么“ System.Version”是引用类型(类)而不是值类型(结构)?

[英]Why is the 'System.Version' a reference type (class) and not a value type (struct)?

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

Microsoft决定以这种方式实现该类型的原因或参数可能是什么? 它是一种简单的“错误” /错误/不足之处还是“功能”(换句话说:“真的想要和有用”)?

有一些类似Parse()TryParse()的方法 ,这些方法通常用于值类型,例如System.Int32System.DoubleSystem.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM