.NET Framework不使用无符号数据类型是否有原因?
我不应该在我的代码中采用它们,例如,List<>的 Count 属性。是一个int。你不能有负数,所以为什么不把它定义为uint?即使我知道计数不能为负数,我应该只使用int吗?
答案 0 :(得分:20)
无符号数字类型不是CLS compliant,因此它们不应用于任何 API - 尤其是.NET框架。
基本上,符合CLS的代码仅使用所有.NET语言中可用的类型。某些语言(如VB.NET)不支持无符号数字类型。
答案 1 :(得分:4)
最基本的答案是.NET框架设计者选择将有符号整数作为BCL(基类库)和CLS(通用语言语法)规范的一部分,而他们并没有选择将无符号整数作为其中的一部分。
对于 决定背后的原因,最终你不得不问微软。我想,Eric Lippert可以在这里做一个更彻底的解释。
归结为以下事实:
int
和uint
之间进行隐式转换,这意味着必须使用强制转换语法明确转换int
的上限足以满足我们在代码中处理的大多数数字将这些放在一起意味着int
类型在大多数情况下都有用。
答案 2 :(得分:1)
无符号数不符合CLS,因为有些语言不支持这些类型。我说纠正,但VB.NET不支持无符号类型。这意味着如果您将公共成员声明为无符号类型,则无法从VB.NET或任何其他不支持无符号类型的.NET语言中使用您的程序集。
答案 3 :(得分:1)
某些.NET感知语言允许使用无符号整数。例如。在C#中你可以使用uint。
但是,如果您将它们暴露在程序集之外,那么它们不符合CLS,那么您可能会发现使用其他语言的其他开发人员在使用您的类时会遇到问题。
总而言之......随意使用它们,但使用私有或内部关键字将它们压缩到您的课程中。