.Net Framework 之 框架图
.Net Framework框架图,如下图:
它表明了这么一种编写软件的方式或者说表明了.Net平台下开发软件的思想和规范。
.Net Framework框架实际只包含两部分:
1、公共语言运行时(CLR: Common Language Runtime) ;
2、框架类库(FCL: Framework Class Library)。
可以设想自己是一个软件项目经理, 很不凑巧的是手里面的程序员有精通VB、VC++和C#的程序员各一名, 那么如何来使这些程序员写作开发同一个项目呢? 以往不可能的任务, 在.Net Framework下就成为可能, 并且这些程序员按照自己精通的方式去开发项目:
第一层: 程序员使用自己熟悉的方式去完成各自的模块, 这些模块可能使用不同的开发语言;
第二层: 采用不同语言开发的模块,通过公共语言规范(CLS: Common Language Specification)来整合, 公共语言规范从各种编程语言中抽象出公共部分并以Com组件的方式对各种编程语言提供支持。另外, 通用类型系统(CTS: Common Type System) 也是.Net平台的重要特性之一, 它提供了.Net标准的数据类型和准则集。严格来讲, CLS是CTS的子集。不同编程语言的模块, 在这一层通过Com组件转化为CLS所支持的语言, 即微软中间语言MSIL(Microsoft Interspace Language), 而相关数据类型则转化为CTS所使用的类型(如: int转化为System.Int32类型, string转化为System.String类型等)。
第三层和第四层, 则是.Net最重要的组件, 这些开发组件是程序员需要和能操作的东西, 每一个开发组件都代表一种应用程序的开发方向, 是某类应用程序的框架。如果说前两层只是不同编程语言如何实现统一的过程的话, 这两层则是利用.Net提供的各种组件, 进行具体的开发过程.
第五层和第六层, 才是真正的.Net Framework框架。之前所做的工作都可以认为是在.Net各种开发组件支持下进行编码的过程。从这两层开始就是程序员完成编码后的汇总调试和运行阶段。
当程序代码执行生成操作(Build)时, 公共语言运行时(CLR)将会连接框架类库(FCL), 提取需要的类库然后编译成为微软中间语言(MSIL: Microsoft Interspace Language)表示的代码。
1、针对API(Windows Application Interface)调用级别的功能均有FCL来完成, 如: 控制台处理、文件处理、数据库处理、网络处理、桌面处理和Web处理等。
2、CLR则类似于Java的虚拟机, 用来在不同平台的系统下提供运行.Net应用程序的环境。
当然为了维护微软操作系统的市场利益, 微软显然还不愿意让其他系统能够很容易的运行.Net程序, 不过这只是个市场策略问题而不是技术问题。
框架类库FCL中的内容如下图:
最后当程序运行时, 再由CLR中的JIT(just in time)编译器进行二次编译, 将中间语言编译为机器码并执行程序。
在程序的开发阶段, 代码经过第一次编译(Build操作)并转换为中间语言后便保存起来;当运行程序时, 则由JIT负责二次编译。所以“ .Net编译结束的.exe文件 ” 其实是中间语言表示的代码文件。当双击程序运行时, 才会经由JIT将中间语言解释为机器码并执行。执行过程如下图:
关于C#语言的数据类型, 如下图:
CLI ( Common Language Infrastructure,公共语言基础设施)是一个规范,类似于产品经理撰写的产品说明书。
在微软开始 .NET 框架的搭建时,曾向 ECMA 标准化组织提交了 CLI 的全部内容(https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf)。
该标准化文件包括以下四部分:
- CTS
- IL
- 底层文件
- 元数据格式
而 CLR 是 CLI 的一个实现(implementation),类似于开发者遵循产品说明书所开发出来的产品。
CLI 有很多种实现,除了 .NET 框架之外,还有 Rotor、Mono 和在《.NET简介》一节中提到的 Core CLR 等。
.Net Framework 之 框架图相关推荐
- dommel mysql_.Net Core AA.FrameWork应用框架介绍
开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我. AA.FrameWork ...
- .Net Core AA.FrameWork应用框架介绍
开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我. AA.FrameWork ...
- ASoC Platform驱动代码框架图
原址 [前言] 在更深入地阅读了工程中 Audio 部分的驱动代码之后,整理出了一个 ASoC Platform 驱动代码的框架图.类似的 ASoC Machine驱动代码框架图在<ASoC M ...
- ASoC Machine驱动代码框架图
原址 [前言] 较久之前写了一篇<Linux ASoC音频驱动架构 及 Machine驱动代码分析>,那个时候刚开始接触 ALSA,文章写得很粗糙.这段时间以来新看了 HAL层.Frame ...
- ASoC Codec驱动代码框架图
原址 [前言] 上个月写了<Audio驱动开发 之 Codec芯片ALC5677驱动代码分析>,但是感觉那个时候理解得还不够深入.写得很粗糙.这一个月以来新看了 HAL层.Framewor ...
- iOS系统整体框架及类继承框架图
iOS系统整体框架及类继承框架图 文章目录 iOS系统整体框架及类继承框架图 前言 一.系统架构 二.Cocoa框架 三.Cocoa框架的类继承体系 1.Foundation框架类继承体系 2.UIK ...
- 火影推荐程序连载23-Robot Framework自动化测试框架核心指南-如何做好自动化测试平台框架的设计
自动化测试如果需要能高效快速的支撑软件项目的测试,项目的快速迭代以及上线,除了以上我们介绍的需要许多的Lib来支持以及需要高效的去编写自动化测试案例外,还需要一个好的自动化测试框架平台来支撑我们的自动 ...
- Spring学习框架图
自己学习Spring时整理的学习框架图,希望对自己和别人有帮助. 转载于:https://blog.51cto.com/dumpling/929285
- java集合框架图(二)
目录 前言 一.list与Set.Map 区别及适用场景 二.ArrayList与LinkedList的区别和适用场景 三.ArrayList与Vector的区别和适用场景 四.HashSet与Tre ...
最新文章
- [WC2018]通道
- linux中挂载系统光盘,linux下挂载光盘
- Windows下Visual studio 2013 编译 Audacity
- 【JEECG技术博文】JEECG表单配置-树形表单
- m1芯片MacBook安装本地编译版matplotlib库
- Java RMI(远程方法调用)入门
- 【045】HTML初学
- 【心电信号】基于matlab心电信号特征提取+分析处理【含Matlab源码 289期】
- 莫烦 Python 基础
- java ME是什么意思_java me是什么?
- 关于 TCP协议和HTTP关系 | TCP的三次握手和四次挥手
- 注册gitLab时报错There was an error with the reCAPTCHA. Please solve the reCAPTCHA again.
- 解决安装tensorflow-gpu:ImportError: DLL load failed:找不到指定的模块。从根源解决问题
- ngx-echarts
- 12个有趣的c面试题目
- MySQL||SQL_ERROR_INFO: “You can‘t specify target table ‘titles_test‘ for update in FROM clause“
- A记录 CNAME记录是什么 | DNS 查询的过程 | DNS 根服务器是什么 | 配置域名 CNAME 原理
- 首个汽车信息安全ISO国际标准正式发布ISO-SAE 21434
- 突破微软远程桌面帧率限制
- 亚马逊测评如何做?亚马逊测评的获得方法?