Answers:
并非所有语言都具有无符号整数的概念。例如,VB 6没有unsigned int的概念,我怀疑这促使VB7 / 7.1的设计人员决定也不要实施(现在已在VB8中实施)。
报价:
http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx
CLS的设计足够大,可以包含开发人员通常需要的语言结构,但又要足够小,以使大多数语言都能够支持它。此外,CLS排除了任何无法快速验证代码类型安全的语言构造,因此,所有符合CLS的语言都可以选择生成可验证的代码。
更新:几年前,我确实对此感到疑惑,尽管我看不到为什么UInt不能进行类型安全性验证,但我想CLS专家必须在某个基准点上设置一个临界点支持的值类型数。同样,当您考虑将越来越多的语言移植到CLR的长期目标时,如果绝对没有概念,为什么要强迫它们实现无符号int以获得CLS遵从性呢?
我怀疑,部分问题与以下事实有关:C语言中的无符号整数类型必须表现为抽象代数环的成员而不是数字[例如,如果无符号16位整数变量等于0, ,递减则需要产生65,535,如果等于65,535,则需要递增使其产生零。]有时这种行为非常有用,但是数字类型表现出的这种行为可能与某些语言的精神背道而驰。我猜想,省略无符号类型的决定可能早于决定同时支持选中和未选中数字上下文的决定。我个人希望无符号数和代数环有单独的整数类型。将一元负运算符应用于无符号32位数字应产生64位有符号结果(除零以外的任何值将产生负数),但对环类型应用一元负则应产生该环内的加法逆。
无论如何,无符号整数不符合CLS的原因是Microsoft决定语言不必为了支持“ CLS兼容”就必须支持无符号整数。
在现实生活中,无符号int不会给您带来太多好处,但是拥有不止一种int类型会给您带来痛苦,因此许多语言只使用int。
符合CLS的目的是允许使用多种语言的课程…
请记住,没有人能使您符合CLS。
您仍然可以在方法内使用无符号整数,也可以将其用作私有方法的参数,因为它仅是CLS兼容限制的公共API。
无符号整数不符合CLS,因为它们在某些语言之间不可互操作。