.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 之 框架图相关推荐

  1. dommel mysql_.Net Core AA.FrameWork应用框架介绍

    开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我. AA.FrameWork ...

  2. .Net Core AA.FrameWork应用框架介绍

    开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我. AA.FrameWork ...

  3. ASoC Platform驱动代码框架图

    原址 [前言] 在更深入地阅读了工程中 Audio 部分的驱动代码之后,整理出了一个 ASoC Platform 驱动代码的框架图.类似的 ASoC Machine驱动代码框架图在<ASoC M ...

  4. ASoC Machine驱动代码框架图

    原址 [前言] 较久之前写了一篇<Linux ASoC音频驱动架构 及 Machine驱动代码分析>,那个时候刚开始接触 ALSA,文章写得很粗糙.这段时间以来新看了 HAL层.Frame ...

  5. ASoC Codec驱动代码框架图

    原址 [前言] 上个月写了<Audio驱动开发 之 Codec芯片ALC5677驱动代码分析>,但是感觉那个时候理解得还不够深入.写得很粗糙.这一个月以来新看了 HAL层.Framewor ...

  6. iOS系统整体框架及类继承框架图

    iOS系统整体框架及类继承框架图 文章目录 iOS系统整体框架及类继承框架图 前言 一.系统架构 二.Cocoa框架 三.Cocoa框架的类继承体系 1.Foundation框架类继承体系 2.UIK ...

  7. 火影推荐程序连载23-Robot Framework自动化测试框架核心指南-如何做好自动化测试平台框架的设计

    自动化测试如果需要能高效快速的支撑软件项目的测试,项目的快速迭代以及上线,除了以上我们介绍的需要许多的Lib来支持以及需要高效的去编写自动化测试案例外,还需要一个好的自动化测试框架平台来支撑我们的自动 ...

  8. Spring学习框架图

    自己学习Spring时整理的学习框架图,希望对自己和别人有帮助. 转载于:https://blog.51cto.com/dumpling/929285

  9. java集合框架图(二)

    目录 前言 一.list与Set.Map 区别及适用场景 二.ArrayList与LinkedList的区别和适用场景 三.ArrayList与Vector的区别和适用场景 四.HashSet与Tre ...

最新文章

  1. [WC2018]通道
  2. linux中挂载系统光盘,linux下挂载光盘
  3. Windows下Visual studio 2013 编译 Audacity
  4. 【JEECG技术博文】JEECG表单配置-树形表单
  5. m1芯片MacBook安装本地编译版matplotlib库
  6. Java RMI(远程方法调用)入门
  7. 【045】HTML初学
  8. 【心电信号】基于matlab心电信号特征提取+分析处理【含Matlab源码 289期】
  9. 莫烦 Python 基础
  10. java ME是什么意思_java me是什么?
  11. 关于 TCP协议和HTTP关系 | TCP的三次握手和四次挥手
  12. 注册gitLab时报错There was an error with the reCAPTCHA. Please solve the reCAPTCHA again.
  13. 解决安装tensorflow-gpu:ImportError: DLL load failed:找不到指定的模块。从根源解决问题
  14. ngx-echarts
  15. 12个有趣的c面试题目
  16. MySQL||SQL_ERROR_INFO: “You can‘t specify target table ‘titles_test‘ for update in FROM clause“
  17. A记录 CNAME记录是什么 | DNS 查询的过程 | DNS 根服务器是什么 | 配置域名 CNAME 原理
  18. 首个汽车信息安全ISO国际标准正式发布ISO-SAE 21434
  19. 突破微软远程桌面帧率限制
  20. 亚马逊测评如何做?亚马逊测评的获得方法?

热门文章

  1. StarDict On MAC
  2. UGC、PGC和OGC内容
  3. 【机器学习】线性(linear)与非线性(nonlinear)分类器区别
  4. 中安威士成功入选《中国数据库安全市场全景图》
  5. STM32基于IIC控制E2PROM和io口扩展
  6. 纸贵科技加入可信区块链推进计划互操作项目组
  7. 人工智能学习 自学第一记
  8. excel 无法使用 ctrl + enter 填充空值
  9. 使用美图秀秀去水印、痘痘、路人甲教程
  10. Git在同一机器下配置多个github账号