gpt4 book ai didi

c# - .NET 基元和类型层次结构,为什么要这样设计?

转载 作者:太空狗 更新时间:2023-10-29 21:31:29 24 4
gpt4 key购买 nike

我想了解为什么在.NET 上有九种整数类型:CharByteSByteInt16UInt16Int32UInt32Int64UInt64;加上其他数字类型:SingleDoubleDecimal;所有这些类型都没有任何关系。

当我第一次开始使用 C# 编码时,我想“太棒了,有一个 uint 类型,我将在不允许使用负值时使用它”。然后我意识到没有 API 使用 uint 而是使用 int,并且 uint 不是从 int 派生的,所以需要转换。

这些类型在现实世界中的应用是什么?为什么不用 integerpositiveInteger 呢?这些是我能理解的类型。一个人的年龄是一个 positiveInteger,因为 positiveIntegerinteger 的子集,所以每当 integer 是预期的。

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

alt text

最佳答案

我的猜测是因为底层硬件破坏了类层次结构。很多时候(也许令人惊讶)当你关心 UInt32 是一个 4 字节大且无符号的,所以 UInt32 不是一种Int32 的类型,Int32 也不是 Int64 的类型。

而且您几乎总是关心 intfloat 之间的区别。

从根本上说,继承和类层次与数学集合包含不同。 UInt32 可以保存的值是 Int64 可以保存的值的严格子集这一事实并不意味着 UInt32 是一种类型Int64。不太明显的是,Int32 不是 Int64 的类型——尽管它们之间没有概念上的区别,但它们的底层表示不同(4 字节对 8 字节)。 小数更加不同。

XPath 不同:所有数字类型的表示法基本相同 - 一串 ASCII 数字。在那里,shortlong 之间的区别是可能的范围之一,而不是表示 - “123”都是 a 的有效表示short 和具有相同值的 long 的有效表示。

关于c# - .NET 基元和类型层次结构,为什么要这样设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1678068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com