FCL与BCL✅
目录
BCL,基础类库(Base Class Library)
-
BCL是一个公共编程框架,称为
基类库
,所有语言的开发者都能利用它。 -
是CLI(Common Language Infrastructure,公共语言基础结构)的规范之一
CLI内容参考👉
.NET 与CLI主要包括:执行网络操作,执行I/O操作,安全管理,文本操作,数据库操作,XML操作,与事件日志交互,跟踪和一些诊断操作,使用非托管代码,创建与调用动态代码等,粒度相对较小,为所有框架提供基础支持。
FCL,框架类库(Framework Class Library)
-
.NET Framework 的主要组件FCL(.NET Framework 类库)和CLR(公共语言运行库)
-
FCL (Framework Class Library)FCL是一个全面的类库,是生成.NET Framework 应用程序、组件和控件的基础
FCL提供了大粒度的编程框架,它是针对不同应用设计的框架 ,FCL大部分实现都引用了BCL
例如我们常说的开发框架:ASP.NET、MVC、WCF和WPF等等,提供了针对不同层面的编程框架 。
-
CLR是.NET Framework 核心组件,负责管理程序的执行。主要由公共语言规范(CLS)和通用类型系统(CTS)两部分组成。
-
通用类型系统(CTS)
CTS是一种类型系统和语言规范,它能够确保CLR能够识别和处理的类型,所有.NET开发语言中的类型,无论时VS.NET类型还是C#.NET类型最终都会被编译成CLR能够识别的CTS类型,因此CTS是.NET平台类型的抽象。例如VB.NET中的integer类型和C#中的int类型都编译成CTS的System.Int32类型。如果某种语言编写的程序能够在CLR上运行,并不能说明这种语言完全符合CTS的规范。例如使用C++编写的代码,部分代码并不符合CTS规范,在编译时把这部分不符合CTS的代码会被编译成原始代码本地CPU指令而非中间代码。
-
指定了规范来描述类型的定义和行为,CTS是.NET平台类型的抽象
-
确保CLR能够识别和处理的类型。以解决不同编码语言的数据类型不同的问题,实现不同语言之间数据类型的统一
无论是VS.NET类型还是C#.NET类型最终都会被编译成CLR能够识别的CTS类型
CIL类型 C# 关键字 VB.NET关键字 System.Byte byte Byte -
注意:如果某种语言编写的程序能够在CLR上运行,并不能说明这种语言完全符合CTS的规范。
例如使用C++编写的代码,部分代码并不符合CTS规范,在编译时把这部分不符合CTS的代码会被编译成
原始代码本地CPU指令
而非中间代码IL。
-
-
公共语言规范(CLS)
-
CLS是CTS的一个子集,所有.NET语言都应遵循此规则才能创建与其他语言
可互操作
的应用程序-
注意:为了使各语言可以互操作,只能使用CLS所列出的功能对象,这些功能统称为
与CLS兼容的功能
,它是在.NET平台上运行语言的最小规范在.NET框架本身提供的类库(并非所有)都是与CLS兼容的,在查看MSDN文档时,不兼容的类和方法都被特别标记为不兼容,
例如C#中的System.UInt32就标记为”此API不兼容CLS。兼容 CLS的替代API为 Int64。
-
-
定义了不同语言之间必须遵守的
共同标准
包括函数调用方式、参数调用方式、数据类型和异常处理方式。
-
-
-
FCL由命名空间组成。每个命名空间都包含可在程序中应用的类、结构、委托和接口等.
从功能上看,可以将FCL框架类库划分为以下几层:
最内一层,由BCL的大部分组成,主要作用是对.NET框架,.NET运行时以及CIL语言本身进行支持,例如基元类型,集合类型,线程处理,应用程序域,运行时,安全性,互操作等.
中间一层,包含了对操作系统功能的封装,例如文件系统,网络连接,图形图像,XML操作等.
最外一层,包含各种类型的应用程序,例如Window Forms,Asp.NET,WPF,WCF,WF等.
- 部分常规的FCL命名空间
命名空间 内容说明 System 包含每个应用程序都要用到的所有基本类型 System.Data 包含用于和数据库通信以及处理数据的类型 System.IO 包含用于执行流I/O以及浏览目录/文件的类型 System.Net 包含进行低级网络通信,并与一些常用的Internet协议协作的类型 System.Runtime.InteropService 包含允许托管代码访问非托管操作系统平台功能(比如COM组件以及Win32或定制DLL中的函数)的类型 System.Security 包含用于保护数据和资源的类型 System.Text 包含处理各种编码(比如ASCII和Unicode)文本类型 System.Threading 包含用于异步操作和同步资源访问的类型 System.Xml 包含用于处理XML架构(XML Schema)和数据的类型
- 部分常规的FCL命名空间
【🥰参考原文链接】