题
我想了解为什么在.NET上有九个整数类型:Char
,Byte
,SByte
,Int16
,UInt16
,Int32
,UInt32
,Int64
,和UInt64
;再加上其他的数字类型:Single
,Double
,Decimal
;并且所有这些类型的具有完全没有关系。
当我第一次开始在C#编码我以为“酷,有一个uint
类型,我会使用,当负值不准”。然后我意识到没有API使用uint
但int
代替,并且uint
不从int
衍生,因此需要的转化率。
这些是什么类型的现实世界的应用程序?为什么不能有,而是integer
和positiveInteger
?这些类型的我能理解。一个人在岁是一个positiveInteger
,由于positiveInteger
是integer
的一个子集有这么需要转换时integer
预期。
以下是在XPath中2.0和XQuery 1.0类型层次结构的图。如果你看看下xs:anyAtomicType
可以看到数字层次decimal
> integer
> long
> int
> short
> byte
。为什么不.NET这样设计?将新框架“奥斯陆”有什么不同?
解决方案
我的猜测是因为底层硬件打破了类层次结构。有(或许令人惊奇的)多次时关心一个UInt32
是一个4字节大和无符号,所以UInt32
的不是的一种Int32
的,也不是一个Int32
一个类型Int64
的。
和你几乎总是关心的int
和float
之间的区别。
从根本上说,继承和类层次结构是不一样的数学集合包含。一个UInt32
能够保存的值是一个Int64
能够保存的值的严格子的事实,并不意味着一个UInt32
是一种Int64
的。那么明显,一个Int32
不是一个类型Int64
的 - 即使有它们之间没有概念上的差异,其基本表示是不同的(4个字节对8个字节)。 Decimals
甚至更多种不同的。
XPath是不同:对于所有的数字类型的表示仅是基本相同 - 的ASCII数字串。在那里,一个short
和long
之间的差中的一个的可能的范围,而不是表示 - “123”既是short
的有效表示以及long
的具有相同值的有效表示
其他提示
小数被用于需要精度(基本上,金钱)的计算。 在这里看到: http://msdn.microsoft.com/ EN-US /库/ 364x0z75(VS.80)的.aspx
碟/双打是小数不同,因为它们旨在是一个近似值(基本上,为科学计算)。
这就是为什么他们是没有关系的。
至于字节和字符,它们是完全不同的:一个字节是0-255,而一个字符是字符,并且因此可以存储Unicode字符(!有很多超过255人)
的uint和整数不自动转换,因为可以每一个存储值是不可能的其他(有的uint两次整数的正范围内)。
一旦你的挂的这一切,它实际上做了很大的意义。
至于你的年龄的事,我会简单地使用int)