BCL如何与CLS相关?

时间:2011-03-23 08:46:47

标签: .net cil base-class-library cls-compliant

一些.net理论问题:哪些库实际上是标准化的?我知道有一个Common Type系统可以指定32位整数和所有这些低级信息,但我对公共语言规范和基类库的状态/关系感到困惑。

系统中有一些基本类型:System.Object,System.ValueType,System.Exception。但是像System.String和它的方法/属性如.Length,.StartsWith或string.IsNullOrEmpty?

这些是否符合任何标准? ECMA-335是否足以实现符合CLS的.net运行时?

PS:我知道人们每天使用的许多功能都不符合标准,但却是Microsofts专有的.net Framework实现的一部分。这不是关于在一些不受支持的操作系统下运行现有应用程序,我会看一下Mono。这实际上是关于什么构成.net核心的理论问题,什么是.net标准库。

2 个答案:

答案 0 :(得分:2)

查看Ecma规范的第四部分。它定义了“标准运行时库”。但是,没有一个“标准库”。它定义了2个配置文件:内核配置文件和紧凑配置文件,以及7个库。紧凑的配置文件是内核配置文件的超级集合。它定义的几个库是“可选的”,并且不与任何一个配置文件相关联。它还标识了一些“可选”的CLR功能,可能不会被所有实现覆盖。

Ecma规范中定义的BCL(基类库)只是它定义的7个库中的一个。

CLS或通用语言规范是API设计的一套指南,可以促进最大的语言互操作性。

如ecma规范的分区I中的第7.2节所定义,有3个符合CLS的视图:

  1. 符合CLS的框架是包含符合CLS的代码的库
  2. CLS使用者是一种语言(或其他工具),允许访问任何符合CLS的框架中定义的任何功能。
  3. CLS扩展程序是一种语言(或其他工具),允许程序员使用和扩展符合CLS的框架。
  4. ECMA规范中列出了每种方法的确切要求。

    在任何情况下,都没有“符合CLS标准的.NET运行时”的概念。 “.NET运行时”由运行时系统中的所有内容组成。但是,CLS合规性仅涉及公开可见项目的界面。

答案 1 :(得分:1)

AFAIK核心是mscorlib.dll中的所有内容。

使用Reflector查看mscorlib.dll(虽然它仍然是免费的!),看看包含什么,什么不包含。或者查看您感兴趣的类型的MSDN .NET Framework Class Library documentation - 文档指出哪个程序集包含每个类型。

包含System.String,但是,例如,System.Uri不是。

包含List<T>等基本通用集合,但Queue<T>Stack<T>不是。