一些.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标准库。答案 0 :(得分:2)
查看Ecma规范的第四部分。它定义了“标准运行时库”。但是,没有一个“标准库”。它定义了2个配置文件:内核配置文件和紧凑配置文件,以及7个库。紧凑的配置文件是内核配置文件的超级集合。它定义的几个库是“可选的”,并且不与任何一个配置文件相关联。它还标识了一些“可选”的CLR功能,可能不会被所有实现覆盖。
Ecma规范中定义的BCL(基类库)只是它定义的7个库中的一个。
CLS或通用语言规范是API设计的一套指南,可以促进最大的语言互操作性。
如ecma规范的分区I中的第7.2节所定义,有3个符合CLS的视图:
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>
不是。