当涂 微网站开发公司,网站空间 更换,qt设计精美ui,域名大全免费查询一、CLR、CLI、CTS、CLS、BCL、FCL简介CLI#xff08;公共语言基础#xff09;CLI是微软公司向ECMA提交的一份语言和数据格式规范#xff0c;CLR是目前为止唯一一个公共语言基础的实现版本。CLI包括了公共类型系统#xff08;CTS#xff09;、公共中间语言#xff08;CIL…一、CLR、CLI、CTS、CLS、BCL、FCL简介CLI公共语言基础CLI是微软公司向ECMA提交的一份语言和数据格式规范CLR是目前为止唯一一个公共语言基础的实现版本。CLI包括了公共类型系统CTS、公共中间语言CIL、底部文件格式以及元数据格式等。CLR公共语言运行库CLR是一个CLI的实现包含了.NET运行引擎和符合CLI的类库。我们开发的几乎所有的.NET程序都基于CLR的类库来实现并且运行在CLR提供的运行引擎之上。CTS公共类型系统CTS定义了一个能够在CLR上运行的语言规范。尽管有很多语言本身不符合CTS规范但是通过加强编译器改变语言附加规范等手段使得许多语言能够编写出能在CLR上运行的程序。一种语言编写的程序编译能够在CLR上运行并不代表这种语言本身完全符合CTS的规范。例如C语言仍然保持了其不符合CTS规范的部分并且在编译时把这部分不符合CTS的代码编译成原始代码而非中间代码。CLS公共语言规范CLS是CTS的一个子集它定义了希望编写在.NET平台上运行的程序的语言所需符合的最小规范。正因为.NET允许由不同语言编写的程序一起执行所以才制定出CLS规范用以避免不同语言特性产生的错误。在.NET Framework中几乎所有(但不是所有)的类都是与CLS兼容的。在MSDN文档说明中不兼容的类和方法都被特别标记为不兼容例如System命名空间中的UInt32结构。UInt32表示32位无符号整数。并不是所有的语言(例如Visual Basic.NET或J#)都支持无符号的数据类型这种数据类型是与CLS不兼容的。BCL基础类库Base Class LibraryBCL是一个公共编程框架称为基类库所有语言的开发者都能利用它。是CLICommon Language Infrastructure公共语言基础结构的规范之一主要包括执行网络操作执行I/O操作安全管理文本操作数据库操作XML操作与事件日志交互跟踪和一些诊断操作使用非托管代码创建与调用动态代码等粒度相对较小为所有框架提供基础支持。FCL框架类库Framework Class LibraryFCL提供了大粒度的编程框架它是针对不同应用设计的框架 FCL大部分实现都引用了BCL例如我们常说的开发框架ASP.NETCore、Windows Forms、WPF等等提供了针对不同层面的编程框架 。二、CLR通用语言执行平台Common Language Runtime简称CLR是微软为他们的.NET的虚拟机所选用的名称。它是微软对通用语言架构CLI的实现版本它定义了一个代码执行的环境。CLR执行一种称为通用中间语言的字节码这个是微软的通用中间语言实现版本。CLR目前已稳定运行于各个平台之中。CLR 和类库与应用和整个系统的关系来源 https://docs.microsoft.com/tr-tr/dotnet/framework/get-started/overview CLR 组件来源 https://www.slideshare.net/Thenmurugeshwari/architecture-of-net-framework在 CLR 中垃圾回收器充当自动内存管理器。C# 以及 CLR 之上的其他语言的内存都是通过垃圾回收器回收的。CLR 主要功能基类库支持 Base Class Library Support内存管理 Memory Management线程管理 Thread Management垃圾回收 Garbage Collection安全性 Security类型检查 Type Checker异常管理 Exception Manager调试管理 Debug Engine中间码(MSIL)到机器代码(Native)编译类别装载 Class Loader开发人员使用高级编程语言编写程序。接下来编译器将代码编译成微软的中继语言(MSIL)。执行的时候CLR会将MSIL码转换为操作系统的原生码Native code。CLR内置有即时编译器。实际上CLR代理了一部分传统操作系统的管理功能通常将在CLR的控制下运行的代码称为托管代码否则称为非托管代码。执行流程将源代码vb、cs编译成托管代模块。托管代码块由中间语言和元数据组成。将托管代码合并成程序集。加载公共语言运行库。执行程序集的代码。生成本地代码。优点它通过在运行时提供程序之间提供丰富的交互来提高性能。通过消除在支持程序的任何操作系统上重新编译程序的需要来增强可移植性。安全性也会提高因为它会分析MSIL指令是安全的还是不安全的。此外使用委托代替函数指针增强了类型的安全性。在垃圾回收器的帮助下支持自动内存管理。提供跨语言集成因为 CLR 中的 CTS 提供了一个通用标准该标准激活了不同的语言以扩展和共享彼此的库。支持使用在其他 .NET 编程语言中开发的组件。提供语言、平台和体系结构独立性。它允许轻松创建可扩展的多线程应用程序因为开发人员无需考虑内存管理和安全问题。