C#/.NET BCL:基礎類庫

2020-07-16 10:04:46
基礎類庫(BCL)是微軟所提出的一組標準庫,可提供給 .NET Framework 所有語言使用。

隨著 Windows 以及 .NET Framework 的成長,BCL 已近乎成為在 .NET 上的 Windows API。

當安裝 .NET Framework 時,所有的基礎類庫都部署到全域性程式集快取(GAC)中,所以不需要在你的工程中手動參照任何的基礎類庫,它們會被自動參照。

部分 mscorlib.dll 包括的名稱空間如下:
  • System:.NET Framework 類庫中最基底的服務,提供應用程式域(Application Domain),資料型別,I/O 以及其他類庫的基礎。
  • System.Collections:提供非泛型資料結構以及集合物件的支援,其中 System.Collections.Generic 中包括所有的泛型資料結構。
  • System.Data:ADO.NET 的組成類庫,為資料存取功能的核心功能。
  • System.IO:提供資料流與檔案讀寫的支援。
  • System.Net:.NET 中的網路功能。
  • System.Reflection:反射。
  • System.Diagnostics:.NET 中提供系統診斷、除錯、追蹤與執行外部進程的能力。
  • System.Text:對文字、編碼以及正規表示式的支援。
  • System.Threading:執行緒控制。
  • System.Web:ASP.NET 的組成類庫,令工程可以和 IIS 伺服器互動,XML Web Service 開發的基本支援也由本類別提供。ASP.NET Core 中消失(如果你不打算用 IIS 做伺服器的容器,則你不需要這個類庫)。
  • System.Xml:XML 解析器。
  • System.Linq,System.Xml.Linq:LINQ 的核心類庫,System.Linq 是 LINQ to Object,而 System.Xml.Linq 則是 LINQ to XML。

然而在 C:Program Files(x86)Reference AssembliesMicrosoftFramework.NETFramework v4.0 目錄下,我們還有一個 System.dll,這個參考是每次新建工程時 VS 自動參照的若干參考之一。

這個程式集中也有一個 System 名稱空間,它的內容和 mscorlib.dll 中的不同。

可以看到,System 這個名稱空間存在於不止一個程式集中。這意味著不同的程式集可以共用一個名稱空間。

在 System.dll 中,System 型別擁有 Uri 這個成員,mscorlib.dll 中的 System 型別則擁有 int 這個成員(基元型別)。

所以我們可以做個試驗,如果我們將工程中對 System 的參照去掉,那麼我們就不能定義一個 Uri 型別的物件。

但我們仍然可以使用 int 型別,因為它雖然也在 System 這個型別裡面,但位於 mscorlib.dll 中。

當你去掉對 System 的參照時,你僅僅去掉了 System.dll 和裡面的功能,但你沒有去掉 mscorlib.dll 中 System 型別的功能。

BCL 是屬於整個 .NET 框架的,並非某種語言的一個基礎類庫。

例如,C# 中 string 型別的所有功能和定義來源於 mscorlib.dll 中的 System.String,而 VB 中 string 型別的功能和定義也來源於相同的地方,所以 String 和 string 兩個關鍵字沒有任何區別,類似的還有 Int32 和 int。

基礎類庫中定義的型別稱為基元(primitive)型別,由 .NET 框架所有的語言共用。