我想了解为什么在.NET上有九个整数类型:CharByteSByteInt16UInt16Int32UInt32Int64,和UInt64;再加上其他的数字类型:SingleDoubleDecimal;并且所有这些类型的具有完全没有关系。

当我第一次开始在C#编码我以为“酷,有一个uint类型,我会使用,当负值不准”。然后我意识到没有API使用uintint代替,并且uint不从int衍生,因此需要的转化率。

这些是什么类型的现实世界的应用程序?为什么不能有,而是integerpositiveInteger?这些类型的我能理解。一个人在岁是一个positiveInteger,由于positiveIntegerinteger的一个子集有这么需要转换时integer预期。

以下是在XPath中2.0和XQuery 1.0类型层次结构的图。如果你看看下xs:anyAtomicType可以看到数字层次decimal> integer> long> int> short> byte。为什么不.NET这样设计?将新框架“奥斯陆”有什么不同?

“替代文字”

有帮助吗?

解决方案

我的猜测是因为底层硬件打破了类层次结构。有(或许令人惊奇的)多次时关心一个UInt32是一个4字节大和无符号,所以UInt32不是的一种Int32的,也不是一个Int32一个类型Int64的。

和你几乎总是关心的intfloat之间的区别。

从根本上说,继承和类层次结构是不一样的数学集合包含。一个UInt32能够保存的值是一个Int64能够保存的值的严格子的事实,并不意味着一个UInt32是一种Int64的。那么明显,一个Int32不是一个类型Int64的 - 即使有它们之间没有概念上的差异,其基本表示是不同的(4个字节对8个字节)。 Decimals甚至更多种不同的。

XPath是不同:对于所有的数字类型的表示仅是基本相同 - 的ASCII数字串。在那里,一个shortlong之间的差中的一个的可能的范围,而不是表示 - “123”既是short的有效表示以及long的具有相同值的有效表示

其他提示

小数被用于需要精度(基本上,金钱)的计算。 在这里看到: http://msdn.microsoft.com/ EN-US /库/ 364x0z75(VS.80)的.aspx

碟/双打是小数不同,因为它们旨在是一个近似值(基本上,为科学计算)。

这就是为什么他们是没有关系的。

至于字节和字符,它们是完全不同的:一个字节是0-255,而一个字符是字符,并且因此可以存储Unicode字符(!有很多超过255人)

的uint和整数不自动转换,因为可以每一个存储值是不可能的其他(有的uint两次整数的正范围内)。

一旦你的挂的这一切,它实际上做了很大的意义。

至于你的年龄的事,我会简单地使用int)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top