为什么unsigned int不符合CLS?

为什么无符号整数不符合CLS?

我开始认为型号规格只是为了性能,而不是正确性。

并不是所有的语言都有无符号整数的概念。 例如VB 6没有无符号整数的概念,我怀疑推动VB7 / 7.1的devise者的决定也不要实现(现在在VB8中实现)。

去引用:

http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx

CLS的devise足够大,可以包含开发人员通常需要的语言结构,但又足够小,大多数语言都能够支持它。 另外,任何语言结构都不能快速validation代码的types安全性,因此CLS排除了所有符合CLS的语言,只要他们select这样做,就可以生成可validation的代码。

更新:几年前,我一直在想这个问题,虽然我不明白为什么一个UInt不是安全可validation的,我想CLS的人必须在某个地方有一个中断点,支持的值types的数量。 另外当你考虑越来越多的语言被移植到CLR的时候,为什么迫使他们实现无符号的整数来获得CLS的遵从,如果没有任何概念的话呢?

我怀疑,问题的一部分围绕这样一个事实:C中的无符号整数types需要performance为抽象代数环的成员而不是数字(例如,如果无符号的16位整数variables等于零,递减它需要产生65,535,如果它等于65,535,那么增加它就需要产生零。]有些时候这种行为是非常有用的,但是数字typesperformance出这样的行为可能违背了某些语言的精神。 我会猜想,忽略unsignedtypes的决定可能早于支持checked和unchecked数字上下文的决定。 就个人而言,我希望有无符号数和代数环的单独整数types; 对一个无符号的32位数应用一元减算子应该产生一个64位的有符号结果[否定除零之外的任何东西都会产生一个负数],但是将一元减去一个环types应该产生该环内的加法逆。

在任何情况下,无符号整数都不符合CLS的原因是Microsoft决定语言不必支持无符号整数以便被视为“CLS兼容”。

无符号整数不符合CLS,因为它们在某些语言之间不能互操作。

无符号整数在现实生活中并没有那么多,但是有一个以上的inttypes会给你带来痛苦,所以很多语言只有一个整数。

CLS兼容的目的是让一个类可以使用很多语言…

请记住,没有人让你成为CLS兼容。

您仍然可以方法中使用未签名的整数,也可以将其作为私有方法的参数,因为它只是符合CLS的公共API。