.net - BCL 与 CLS 有何关系?

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

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

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

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

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

最佳答案

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

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

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

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

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

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

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

    关于.net - BCL 与 CLS 有何关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5402699/

    相关文章:

    .net - .NET 中的托管和非托管代码

    c# - 关于 System.Timers.Timer 的困惑

    .net - 链接列表的只读包装器。如何?

    c# - 安装 nuget 包 "same key has already been added."

    c# - 数组的结构比较

    c# - 所有者描述的 ToolStripDropDownButton

    c# - ldc.i4.s 和 ldc.i4 有什么区别?

    .net - 是否有一个免费工具能够从 CLI 程序集中删除未使用的代码?

    c# - 使用 'typeof'和 'is'时,c#如何共享引用类型的泛型实现?

    c# - Directory.GetFiles 使用 SearchPattern 返回意外结果