为什么unsigned int不符合CLS?

时间:2008-08-08 19:55:40

标签: c# .net unsigned-integer cls-compliant

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

我开始认为类型规范只是为了提高性能而不是为了正确性。

4 个答案:

答案 0 :(得分:82)

并非所有语言都具有无符号整数的概念。例如,VB 6没有无符号整数的概念,我怀疑这导致VB7 / 7.1的设计者决定不实现(现在在VB8中实现)。

引用:

  

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

     

CLS的设计足够大,可以包含该语言   开发人员通常需要的构造,但又足够小   大多数语言都能够支持它。另外,任何语言   构造使得无法快速验证类型安全性   代码被排除在CLS之外,以便所有符合CLS的语言   如果他们选择这样做,可以生成可验证的代码。

更新:几年前我确实对此感到好奇,虽然我不明白为什么UInt不能进行类型安全验证,但我猜CLS家伙必须在某个地方找到关于什么的切断点。支持的基线最小值类型。此外,当您考虑将越来越多的语言移植到CLR的长期时,如果绝对没有概念,为什么强迫他们实施无符号整数以获得CLS合规性呢?

答案 1 :(得分:20)

我怀疑,部分问题围绕这样一个事实:C中的无符号整数类型需要表现为抽象代数环的成员而不是数字[意味着,例如,如果是无符号的16位整数变量等于零,递减它 required 产生65,535,如果它等于65,535,则递增它需要产生零。]有时这种行为非常有用,但数字类型表现出来行为可能违背了一些语言的精神。我猜想省略无符号类型的决定可能早于支持已检查和未检查数字上下文的决定。就个人而言,我希望有无符号数和代数环的单独整数类型;将一元减号运算符应用于无符号32位数应产生64位有符号结果[否定零以外的任何内容将产生负数]但将一元减号应用于环类型应该在该环内产生加法逆。 / p>

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

答案 2 :(得分:6)

Unsigned int在现实生活中并没有那么多,但是如果有超过1种类型的int会给你带来痛苦,所以很多语言只会有一些内容。

CLS兼容旨在允许使用多种语言的课程......

请记住,没有人会让您符合CLS。

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

答案 3 :(得分:4)

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