1.5 公共语言规范

CTS中定义了大量的类型,要求每种语言都全部实现并不现实,亦无必要,例如Visual Basic.NET就没有完全实现CTS,因此在CTS这个大的集合中,撷取其中的一部分,要求各种语言都支持,否则无法实现互操作,这一小部分称作公共语言规范(Common Language Specification,CLS)[1],术语比较多,大家可能一时难以理清它们之间的关系,一图胜千言,CLR、CTS、(Common Language Specification,CLS)这"3C"之间的关系如图1-9所示:

1.5 公共语言规范 - 图1

图 1-9 CLR、CTS、CLS之间的关系

从图1-9可以看出,CLS是CTS的子集,它还有了一些使用上的约定。CLS的终极目标就是要让.NET平台上用不同编程语言编写的对象之间可以互相调用。基于这个目标,这就要求两种编程语言编写的对象中彼此公开的部分——类、接口、方法、字段等使用的都是CLS这个规范规定的数据类型,并且遵守CLS的约定,如图1-10所示。

1.5 公共语言规范 - 图2

图 1-10 公共语言规范

注意 并非每个程序集的公共部分都必须严格使用符合CLS规范的类型,但这会让程序集在跨语言互操作性上受影响,并影响潜在的客户群数量。

[1]在本书的24.2.4节介绍了“CLSCompliantAttribute特性”,使用该特性可以检查当前程序集是否符合CLS规范。