基础类库(BCL)是微软所提出的一组标准库,可提供给 .NET Framework 所有语言使用。
随着 Windows 以及 .NET Framework 的成长,BCL 已近乎成为在 .NET 上的 Windows API。
当安装 .NET Framework 时,所有的基础类库都部署到全局程序集缓存(GAC)中,所以不需要在你的工程中手动引用任何的基础类库,它们会被自动引用。
部分 mscorlib.dll 包括的命名空间如下:
然而在 C:/Program Files(x86)/Reference Assemblies/Microsoft/Framework/.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 框架所有的语言共享。