2

一些 .net 理论问题:哪些库实际上是标准化的?我知道有一个通用类型系统,它指定了诸如 32 位整数和所有这些低级信息之类的东西,但我对通用语言规范和基类库的状态/关系感到困惑。

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

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

PS:我知道人们日常使用的许多功能并不符合标准,而是微软专有的 .net 框架实现的一部分。这与在某些不受支持的操作系统下运行现有应用程序无关,我会为此考虑 Mono。这确实是一个关于什么是.net 核心的理论问题,.net 标准库是什么。

4

2 回答 2

2

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

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

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

正如 ecma 规范第 1 部分第 7.2 节中所定义的,CLS 合规性有 3 种视图:

  1. 符合 CLS 的框架是包含符合 CLS 的代码的库
  2. CLS 使用者是一种语言(或其他工具),它允许访问任何 CLS 兼容框架中定义的任何功能。
  3. CLS 扩展器是一种允许程序员使用和扩展符合 CLS 的框架的语言(或其他工具)。

ECMA 规范中列出了每一项的确切要求。

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

于 2011-05-11T00:53:29.123 回答
1

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

查看带有 Reflector 的 mscorlib.dll(虽然它仍然是免费的!)以查看包含哪些内容和不包含哪些内容。或者查看您感兴趣的类型的MSDN .NET Framework 类库文档- 该文档指出了哪个程序集包含每个类型。

System.String 包括在内,但例如 System.Uri 不包括在内。

包括基本的通用集合,List<T>但不包括在内。Queue<T>Stack<T>

于 2011-03-23T08:54:49.653 回答