代码之家  ›  专栏  ›  技术社区  ›  esac

为什么.NET框架不使用未签名的数据类型?[复制品]

  •  17
  • esac  · 技术社区  · 15 年前

    可能重复:
    Why is Array.Length an int, and not an uint

    它背后是否有原因.NET框架不使用未签名的数据类型?

    我不应该在代码中采用它们,但例如, 伯爵 列表的属性<>是int。您不能有负计数,所以为什么不应将其定义为uint?即使我知道计数不能为负,我应该只使用int吗?

    4 回复  |  直到 15 年前
        1
  •  20
  •   Andrew Hare    15 年前

    无符号数字类型不是 CLS compliant 所以它们不应该用于 任何 API-尤其是.NET框架。

    基本上,符合CLS的代码只使用所有.NET语言中可用的类型。某些语言(如vb.net)不支持无符号数字类型。

        2
  •  4
  •   Adam Robinson    15 年前

    最基本的答案是,.NET框架设计人员选择具有bcl(基类库)和cls(公共语言语法)规范的有符号整数部分,而他们没有选择使无符号整数部分。

    因为背后的推理 那个 最后,你得问微软。我可以想象埃里克·利珀特能在这里作出更详尽的解释。

    归结为以下事实:

    • 您不能(至少不能)在 int uint ,表示必须使用强制转换语法显式进行转换
    • 如果不增加代码的可读性,最好避免不必要的强制转换语法。
    • 上限 int 对于我们在代码中处理的大多数数字都是足够的

    把它们放在一起意味着 int 在大多数情况下,类型起作用。

        3
  •  1
  •   Sir Rippov the Maple    15 年前

    无符号数字不符合CLS,因为有些语言不支持这些类型。我说的是正确的,但vb.net不支持无符号类型。这意味着,如果将公共成员声明为无符号类型,则不能从VB.NET或不支持无符号类型的任何其他.NET语言中使用程序集。

        4
  •  1
  •   Buh Buh    15 年前

    某些.NET感知语言允许无符号整数。例如,在C中,您可以使用uint。

    但是,由于它们不符合CLS,如果您在程序集之外公开它们,那么您可能会发现使用其他语言的开发人员在使用类时会遇到问题。

    总之…您可以随意使用它们,但可以使用私有关键字或内部关键字将它们压缩到类中。