2011-03-23 30 views
2

一些.net理論問題:哪些庫實際上是標準化的?我知道有通用類型系統指定了32位整數和所有這些低級信息,但我對公共語言規範和基類庫的狀態/關係感到困惑。BCL如何與CLS相關?

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

這些是否屬於任何標準? ECMA-335是否足以實現符合CLS的.net運行時? PS:我知道人們日常使用的許多功能不符合標準,但是它是微軟專有.NET框架實現的一部分。這不是關於在一些不受支持的操作系統下運行現有的應用程序,我會考慮Mono。這實際上是一個關於.net的核心是什麼的理論問題,什麼是.net標準庫。

回答

2

查看Ecma規範的Partition IV。它定義了「標準運行時庫」。但是,沒有一個「標準庫」。它定義了2個配置文件:一個內核配置文件和一個壓縮配置文件以及7個庫。緊湊的配置文件是內核配置文件的超集。它定義的幾個庫是「可選的」,並且不與任何一個配置文件關聯。它還標識了一些「可選」的CLR功能,並且可能不被所有實現所覆蓋。

Ecma規範中定義的BCL(基類庫)只是它定義的7個庫中的一個。

CLS或通用語言規範是API設計的一組指導原則,可促進最大程度的語言互操作性。

如在第7.2節中的ECMA的分區我定義規格有3次CLS順應性:

  1. 甲CLS兼容框架是含有符合CLS代碼
  2. 甲CLS消費者是一語言的庫(或其他工具),允許訪問任何CLS兼容框架中定義的任何功能。
  3. CLS擴展器是一種允許程序員使用和擴展CLS兼容框架的語言(或其他工具)。

ECMA規範中列出了每種產品的確切要求。

在任何情況下,都沒有「CLS兼容.NET運行時」的概念。 「.NET運行時」由運行時系統中的所有內容組成。但是,CLS合規性只涉及公開可見項目的界面。

1

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

看看mscorlib.dll與反射器(雖然它仍然是免費的!),看看有什麼包括什麼不是。或者查看MSDN .NET Framework Class Library documentation獲取您感興趣的類型 - 文檔指出哪個程序集包含每種類型。

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

包含基本泛型集合,如List<T>,但是Queue<T>Stack<T>沒有。