C#/.NET BCL:基础类库

基础类库(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 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 框架所有的语言共享。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/22356.html

(0)
上一篇 2021年7月20日
下一篇 2021年7月20日

相关推荐

发表回复

登录后才能评论