首页>Program>source

Possible Duplicate:
为什么Array.Length是int而不是uint

.NET Framework背后没有使用未签名数据类型的原因吗?

我不应该在代码中采用它们,但是例如,List<>的Count属性是一个int.您不能有一个负数,那么为什么不将其定义为uint? 即使我知道计数不能为负,我也应该仅使用int吗?

最新回答
  • 29天前
    1 #

    无符号数字类型不符合CLS,因此不应将其用于anyAPI-特别是 .NET框架。

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

  • 29天前
    2 #

    最基本的答案是.NET框架设计人员选择将BCL(基类库)和CLS的带符号整数部分包含在内. (通用语言语法)规范,而他们没有选择将无符号整数作为它的一部分。

    出于决定背后的原因,最终您不得不问微软.我想埃里克·利珀特(Eric Lippert)可以在这里作更详尽的解释。

    归结为以下事实:

      You can't (or at least don't) have an implicit conversion between intuint ,意味着必须使用强制转换语法明确进行转换

      如果不增加代码的可读性,最好避免不必要的强制转换语法

      int的上限 足以处理我们在代码中处理的大多数数字

      将它们放在一起意味着 int 在大多数情况下,type才可达到目的。

  • 29天前
    3 #

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

  • 29天前
    4 #

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

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

    因此,总而言之...可以随意使用它们,但可以使用private或internal关键字将它们压缩在您的类中。

  • python:Django独立脚本
  • java:CXF 242:找不到命名空间http://schemasxmlsoaporg/soap/http的管道启动器