C#/.NET BCL:基础类库
基础类库(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 框架所有的语言共享。
随着 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 框架所有的语言共享。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算