可能重复:
为什么Array.Length一个int,而不是一个UINT
有是.NET框架不使用无符号的数据类型背后原因是什么?
我不应该采取他们在我的代码,但例如,一个List <>的Count属性是一个int。 你不能有一个负计数,所以为什么不应该它被定义为uint? 我应该只使用INT是,即使我知道计数不能为负数?
可能重复:
为什么Array.Length一个int,而不是一个UINT
有是.NET框架不使用无符号的数据类型背后原因是什么?
我不应该采取他们在我的代码,但例如,一个List <>的Count属性是一个int。 你不能有一个负计数,所以为什么不应该它被定义为uint? 我应该只使用INT是,即使我知道计数不能为负数?
无符号的数值类型不符合CLS尤其是.NET框架-所以他们不应该被用于任何 API。
基本上,CLS兼容代码只利用在所有.NET语言的类型。 有些语言(如VB.NET)不支持无符号的数值类型。
最基本的答案是,.NET框架的设计者选择了已经签署了BCL(基类库)和CLS(通用语言语法)规范的整数部分,而他们没有选择,使这无符号整数部分。
作出这一决定的理由,最终你得问微软。 我可以想象埃里克利珀可以用一个更透彻的解释这里插入内容。
它归结为以下事实:
int
和uint
,这意味着转换必须明确使用转换语法进行 int
是足够的,我们应对代码数量最多 把这些一起意味着, int
型酒店在大多数情况下的宗旨。
因为有不支持这些类型的语言符号的数字不符合CLS。 我在校说话,但VB.NET不支持无符号的类型。 这意味着,如果你声明一个公共成员为无符号的类型,那么你的组件无法从VB.NET或不支持无符号类型的任何其他.NET语言使用。
一些.NET语言的认识确实允许无符号整数。 例如,在C#中,你可以使用UINT。
然而,因为它们不符合CLS,如果你揭露他们的组件之外,那么你可能会发现,其他开发人员使用不同的语言将使用类有问题。
因此,在总结......随意使用它们,而是让他们使用私营或内部关键字拉上你的类里面。