当前位置: 首页 > news >正文

.Net FrameWork总结

.Net FrameWork总结

  • 介绍
    • .Net
    • 公共语言运行库
    • CLI的组成
    • .NET Framework的主要组成
    • .NET Framework的优点
    • CLR在运行期管理程序的执行,包括以下内容
    • CLR提供的服务
    • FCL的组成 或 服务(这个其实就是我们编码时常用到的类库):(下面会详细的说我们的编码是如何被及其识别并转换的)
  • 架构图
    • 类库(Framework Class Library,FCL)
    • 公共语言规范Common Language Specification (CLS) 和公共类型系统Common Type System (CTS)
    • 源代码文件变异成CIL的编译过程
    • 程序运行时CIL编译成本机代码
    • .NET 框架编译和执行
  • 总结

介绍

针对大部分应用的开发人员来说,可能对.net framework都耳熟能详,对我来说可能一听就知道但是具体到底是个什么东西我确实不太明确,开发块两年了发现自己只是针对Unity的C#开发,实则对.Net FrameWork没有一个真正的了解,所以这里针对.Net Framework这个无数前辈的经验和基类开发出来的框架,做一个深度的学习和了解。

这里还是要把官方对.Net的概念说一下,因为我可能刚入行的时候不会关注这个,而更加注重的是上面给的需求是什么,我应该怎么设计实现这个需求,直到现在发现如果想真正的在编程界扎根,我还是必须要去学习更加深入的东西。

.Net

.Net框架是一个多语言组件开发执行环境,它提供了一个跨语言的统一编程环境,.NET框架的目的是便于开发人员更容易地建立Web应用程序和Web服务,使得Internet上的各应用程序之间,可以使用Web服务进行沟通。从层次结构来看,.NET框架又包括三个主要组成部分:公共语言运行库(CLR:Common Language Runtime)、服务框架(Services Framework)和上层的两类应用模板——传统的Windows应用程序模板(Win Forms)和基于ASP.NET的面向Web的网络应用程序模板(Web Forms和Web Services)。

公共语言运行库

公共语言运行库(common language runtime,CLR) 是托管代码执行核心中的引擎。运行库为托管代码提供各种服务,如跨语言集成、代码访问安全性、对象生存期管理、调试和分析支持。它是整个.NET框架的核心,它为.NET应用程序提供了一个托管的代码执行环境。它实际上是驻留在内存里的一段代理代码,负责应用程序在整个执行期间的代码管理工作。比较典型的有:内存管理、线程管理、安全管理、远程管理、即使编译、代码强制安全类检查等,这些都可以成为.NET框架的生命线。

在CLR之上的是服务框架,它提供了一套开发人员希望在标准语言库中存在的基类库,包括集合、输入/输出、字符串及数据类。

那么,在Windows DNA(分布式集成网络应用体系结构)之后,微软提出新的.NET框架(新托管代码编程模型)的主要原因是什么?
问题发生在已开发了多种技术的整合的一个单一应用程序的子系统上。例如,一个制造企业有不同的系统,如库存管理系统,物料清单系统,财务总帐系统,所有使用可用于应用程序开发的各种技术实现的。这些系统需要集成在一起,从而形成一个更高级别的企业信息系统的组织。要做到这一点,应用程序开发人员必须使用如微 软的分布式组件对象模型(DCOM),通用对象请求代理体系结构(CORBA),Java远程方法调用(RMI)等技术。然而,这些分布的技术通过已开发的应用程序编程语言非常紧密地耦合在一起。
跨语言的互操作性也是受限的。例如,如果在Visual C++类已经被创建,那么不可能在Visual Basic开发新的类并将其扩展到Visual C++。因此,开发者将不得不用每一种项目中用到的语言重新编写同样的逻辑的类。功能的可重用性得到了支持,但在早期的技术,真正的代码的可重用性是不可用。因此,开发人员不得不学习被用于应用程序的开发组织用到的所有语言。注册的COM组件。COM组件注册,才可以在目标机器上使用的应用程序。应用程序必须查找Windows注册表中查找并加载的COM组件。



20世纪90年代以来出现了3中典型的组件技术:
1)OMC(对象组件模型)的CORBA
2)Microsoft的COM/DCOM
3)Sun公司的JavaBeans

在2002年,微软发布了.NET框架的第一个版本,声称其解决了旧问题并实现了下一代系统的目的。.NET框架是一种比MFC和COM编程技术更一致并面向对象的环境。它的特点包括:

1)多平台。【面向异构网络、硬件平台和操作系统,可以在多种多样的系统上运行,从服务器、桌面机到PDA和移动电话。】
2)行业标准。【实现软件系统之间的智能交互和协同工作,使用行业标准的通信协议,比如:XML、HTTP、SOAP和WSDL。】
3)安全性。【提供一个标准化的、安全的、一致的模型和环境,提供更加安全的执行环境,即使有来源可疑的代码存在。】



Microsoft为.NET技术制定了一整套完整的规范,便是CLI(Common Language Infrastructure,公共语言基础结构,公共语言架构)。

CLI的组成

1)CTS(Common Type System,公共类型系统)。【定义了一组丰富的内置类型,以及每种类新固有的、独有的特性;最重要的特征之一是所有类型都继承自公共的基类Object类】
2)CLS(Common Language Specification,公共语言规范)。【说明了.NET兼容编程语言的规则、属性和行为,其主题包括数据类型、类结构和参数传递】
3)CIL(Common Intermediate Language,公共中间语言)。
4)CLR(Common Language Runtime,公共语言运行库)。
5)BCL(Base Class Library,基类库)。【FCL的一个子集】
6)元数据定义、语义。
7)其他相关标准化文档、协议、规范。


Microsoft针对CLI(命令行)在Windows上的完整实现便是 .NET Framework(.NET 框架)。

.NET Framework的主要组成

1)CLR(Common Language Runtime,公共语言运行时,公共语言运行库)。【核心组件。提供服务:自动垃圾收集;安全和认证;通过访问BCL得到广泛的编程功能,如web服务和数据服务之类的功能】
2)FCL(Framework Class Library,Framework类库,框架类库)。【BCL的一个超集】

.NET Framework的优点

1)面向对象的开发环境。【CLR、BLR和C#被设计得完全面向对象;为本地程序和分布式系统提供一致的、面向对象的编程模型;】
2)自动垃圾收集(Garbage Collection,GC)。【GC自动从内存中删除程序不在访问的对象】
4)互操作性。【不同.NET语言编写的软件模块无缝交互;平台调用(platform invoke,P/Incoke)的特性;允许与COM进行交互】
4)不需要COM(Component Object Model,组件对象模型)。
5)简化的部署。【.NET程序不需要使用注册表注册;并行执行特性】
6)类型安全性。【CLR检查并确保参数及其它数据对的类型安全】
7)基类库(Base Class Library,基类库)。有时称为框架类库(Framework Class Library,FCL)。【包括通用基础类、集合类、线程和同步类、XML类】

CLR在运行期管理程序的执行,包括以下内容

1)内存管理。
2)代码安全验证。
3)代码执行、线程管理和异常处理。
4)垃圾收集。

CLR提供的服务

1)内存管理。
2)异常处理。
3)自动垃圾收集。
4)管理代码的执行
5)JIT实时编译器(Just-in-Time)。
6)类加载器。【通过访问BCL得到广泛的编程功能,如web服务和数据服务之类的功能】
7)反射服务。
8)安全服务。
9)提供系统服务。

FCL的组成 或 服务(这个其实就是我们编码时常用到的类库):(下面会详细的说我们的编码是如何被及其识别并转换的)

1)基础类型。【整数、实数、字符串等类型定义】
2)数据结构封装。【集合、链表、队列、堆栈等数据类型】
3)Windows和Web等界面要素。【主要是按钮、标签、文本框、菜单等可视化控件】
4)Web Service要素。【用于Web服务的定义、描述、配置、解析等】
5)XML文档处理。【如XML文件、属性、元素、节点、读写器、解析器等类型】
6)文件的输入输出。【如驱动器、目录、文件、流、读写器等类型】
7)数据访问。【如数据连接、数据命令、数据集、数据表、记录等类型】
8)网络通信。【如主机、管道、套接字、消息等类型】
9)异常处理。【用于处理系统和应用程序所引发的各种异常】
9)类型反射。【用于获取程序集、对象、方法属性、字段等目标的元数据信息类型】
10)用于应用程序管理、操作系统功能封装、安全性控制等其他方面的类型。

架构图

看了上面这么多的理念我自己都累,下面总结一个大体的流程图,总结一下上面所查到的资料

在这里插入图片描述
途中的最下层蓝色部分实际就是.NETFramework的基础,也就是应用软件的基础。它不是凭空出来的,实际上API,COM+,和一些相关驱动依然是它的基石。.NET Framework只不过是对这些前辈们进行了系统的封装和扩充,在这个过程中,吸取了Java框架的很多经验。

除了蓝色部分以外,其他均为.NET Framework的主体。

类库(Framework Class Library,FCL)

类库(Framework Class Library,FCL),所有在.NET能够使用的类库。它分为下面两部分
1.基类库Base Class Library(BCL) ,顾名思义,其中包含一些基础的类,如:IO,String,Net等等。
2.FCL中的其他类。这些类库基本上都是引用BCL,在这些类库的基础上做的扩充。如:ADO.NET,ASP.NET,Windows.Forms等等,它们是我们编写程序更加方便,专一。

公共语言规范Common Language Specification (CLS) 和公共类型系统Common Type System (CTS)

公共语言规范Common Language Specification (CLS) 和公共类型系统Common Type System (CTS) ,是CLI的一部分内容,它们的目的是保证各种语言与.NET Framework的兼容性的。就好像有的食客习惯用筷子,有的则喜欢用叉子,像八戒就用九齿钉耙。有了CLS和CTS,各路食客就能使用自己喜欢用的餐具吃上可口的食物了。例如:把C#中的int和VB中的Integer统一映射到System.Int32。

而对于刚刚入门的程序来说其实使用的就是最上面的C#、C++等语言进行开发。

上面把整个的.NET Framework的框架都介绍了,也该说说我们编写的源代码是如何进一步向下渗透并运作的了,它实际就是将我们编写的语言转换成机器能够识别的中间语言。

源代码文件变异成CIL的编译过程

在这里插入图片描述

程序运行时CIL编译成本机代码

在这里插入图片描述

.NET 框架编译和执行

在这里插入图片描述

注:相关名称一览:

CLI(Common Language Infrastructure,公共语言基础结构,公共语言架构)
CTS(Common Type System,公共类型系统)
CLS(Common Language Specification,公共语言规范)
CIL(Common Intermediate Language,公共中间语言)

.NET Framework(.NET 框架)
CLR(Common Language Runtime,公共语言运行库)
FCL(Framework Class Library,Framework类库,框架类库)

BCL(Base Class Library,基类库)
实时JIT(Just-in-Time)编译器
GC(Garbage Collection,垃圾收集)

API(Application Programming Interface,应用程序编程接口)注:还特指API的说明文档,也称为帮助文档
MFC(Microsoft foundation classes,微软基础类库)
COM(Component Object Model,组件对象模型)

managed code 托管代码
unmanaged code 非托管代码

平台调用(platform invoke,P/Incoke)
Ecma(Europen Computer Manufacturers Association,欧洲计算机制造商协会)

总结

找完这些资料学习发现,身为一个功能实现者来说其实就是编程工作的最底层,想要建筑大楼还是需要不断的去学习,每天充实自己,希望看到的人也能有所收获。

相关文章:

  • web自动化上传文件
  • nn.LSTM个人记录
  • Mybatis 日志
  • 【Bootstrap学习 day1】
  • 【交叉编译环境】安装arm-linux交叉编译环境到虚拟机教程(简洁版本)
  • 实现文字超过显示宽度每间隔1s自动向左滚动显示(原生JS和vue两种实现方式)
  • SLF4J: Class path contains multiple SLF4J bindings.解决
  • SpringBoot整合Mybatis遇到的常见问题及解决方案
  • 【Midjourney】Midjourney根据prompt提示词生成人物图片
  • 【Linux】修复 Linux 错误 - 文件过大
  • java freemarker 动态生成excel文件
  • 【leetcode150】逆波兰表达式求值Java代码讲解
  • vue大屏-列表自动滚动vue-seamless-scroll
  • mysql二进制对应ef中实体表字段类型
  • git 学习 之一个规范的 commit 如何写
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【node学习】协程
  • canvas绘制圆角头像
  • flask接收请求并推入栈
  • HTML5新特性总结
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Javascript基础之Array数组API
  • JavaScript设计模式之工厂模式
  • java取消线程实例
  • maven工程打包jar以及java jar命令的classpath使用
  • miaov-React 最佳入门
  • Mysql优化
  • ng6--错误信息小结(持续更新)
  • nginx 配置多 域名 + 多 https
  • NSTimer学习笔记
  • Python学习之路16-使用API
  • TypeScript迭代器
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Wamp集成环境 添加PHP的新版本
  • webpack入门学习手记(二)
  • 复杂数据处理
  • 观察者模式实现非直接耦合
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 每天10道Java面试题,跟我走,offer有!
  • 你不可错过的前端面试题(一)
  • 区块链将重新定义世界
  • 数据可视化之 Sankey 桑基图的实现
  • 用jQuery怎么做到前后端分离
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • const的用法,特别是用在函数前面与后面的区别
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #微信小程序:微信小程序常见的配置传值
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (办公)springboot配置aop处理请求.
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (万字长文)Spring的核心知识尽揽其中