.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,欧洲计算机制造商协会)

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/583093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

408数据结构常考算法基础训练

408相关: 408数据结构错题知识点拾遗 408数据结构常考算法基础训练 408计算机组成原理错题知识点拾遗408操作系统错题知识点拾遗等待完善408计算机网络错题知识点拾遗 408计算机网络各层协议简记等待完善 该训练营为蓝蓝考研(蓝颜知己)的算…

Python漂浮爱心完整代码

文章目录 环境需求完整代码详细分析环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.blog.csdn.net/arti…

【PXIE301-208】基于PXIE总线架构的Serial RapidIO总线通讯协议仿真卡

板卡概述 PXIE301-208是一款基于3U PXIE总线架构的Serial RapidIO总线通讯协议仿真卡。该板卡采用Xilinx的高性能Kintex系列FPGA作为主处理器,实现各个接口之间的数据互联、处理以及实时信号处理。板卡支持4路SFP光纤接口,支持一个PCIe x8主机接口&…

不同SqlServer版本的Jdbc驱动下载地址

不同SqlServer版本的Jdbc驱动下载地址 1.下载地址 发行说明 - JDBC Driver for SQL Server | Microsoft Learn 版本兼容性查看 支持矩阵 - JDBC Driver for SQL Server | Microsoft Learn 建议方法查看 SQL 版本兼容性 Java 和 JDBC 规格支持 2.下载驱动 下面是2008版本对应…

写一个工具类能够让所有的建筑物体检测地面并且吸附地面

直接上代码 using UnityEditor; using UnityEngine; using System.Collections.Generic; using System.IO; using OHGame; using Unity.VisualScripting;public class OHEditorTool : Editor {[MenuItem("OHGame/Tools/行动区域点落地")]private static void GetObj…

element el-table实现可进行横向拖拽滚动

【问题】表格横向太长,表格横向滚动条位于最底部,需将页面滚动至最底部才可左右拖动表格,用户体验感不好 【需求】基于elment的el-table组件生成的表格,使其可以横向拖拽滚动 【实现】灵感来源于这篇文章【Vue】表格可拖拽滚动&am…

Linux 线程概念

文章目录 前言线程的概念线程的操作操作的原理补充与说明 前言 ① 函数的具体说明被放在补充与说明部分 ② 只说些基础概念和函数使用 线程的概念 网络回答:Linux 线程是指在 Linux 操作系统中创建和管理的轻量级执行单元。线程是进程的一部分,与进程…

flutter 安卓使用高德插件黑屏

地址 https://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project 下面介绍的方式是Native配置 sdk,也就是需要手动下载到本地在引入的方式 1、添加 jar 文件: 将下载的地图 SDK 的 jar包复制到工程(此处截…

2702 高级打字机

因为Undo操作只能撤销Type操作,所以Undo x 实际上就是删除文章末尾x个字母。用一个栈即可解决(每个字母最多进出一次)。 这种情况下只需要设计一个合理的数据结构依次执行操作即可。 版本树:Undo x撤销最近的x次修改操作&#xf…

将正规文法转化为正规式

将正规文法转化为正规式有以下几个规则: 通过一道例题来讲解: ①A-->aC|bA ②C-->bD ③D-->aC|bD| (1)首先将②带入③(不能将自身带入自身例如D-->aC|bD|,文法中带D,不能带入D) DabD|bD|(…

ARM CCA机密计算软件架构之内存加密上下文(MEC)

内存加密上下文(MEC) 内存加密上下文是与内存区域相关联的加密配置,由MMU分配。 MEC是Arm Realm Management Extension(RME)的扩展。RME系统架构要求对Realm、Secure和Root PAS进行加密。用于每个PAS的加密密钥、调整或加密上下文在该PAS内是全局的。例如,对于Realm PA…

公司创建百度百科需要哪些内容?

一个公司或是一个品牌想要让自己更有身份,更有知名度,更有含金量,百度百科词条是必不可少的。通过百度百科展示公司的详细信息,有助于增强用户对公司的信任感,提高企业形象。通过百度百科展示公司的发展历程、领导团队…

AI-ChatGPTCopilot

ChatGPT chatGPT免费网站列表:GitHub - LiLittleCat/awesome-free-chatgpt: 🆓免费的 ChatGPT 镜像网站列表,持续更新。List of free ChatGPT mirror sites, continuously updated. Copilot 智能生成代码工具 安装步骤 - 登录 github&am…

NXP实战笔记(三):S32K3xx基于RTD-SDK在S32DS上配置WDT配置

目录 1、WDT概述 2、SWT配置 2.1、超时时间,复位方式的配置 2.2、中断形式 1、WDT概述 SWT 编程模型只允许 32 位(字)访问。 以下任何尝试访问都是无效的: •非32位访问 •写入只读寄存器 •启用SWT时,将不正确的值写入SR…

uniapp:实现手机端APP登录强制更新,从本地服务器下载新的apk更新,并使用WebSocket,实时强制在线用户更新

实现登录即更新,或实时监听更新 本文介绍的是在App打开启动的时候调用更新,点击下方链接,查看使用WebSocket实现实时通知在线用户更新。 uniapp:全局消息是推送,实现app在线更新,WebSocket,ap…

java 纯代码导出pdf合并单元格

java 纯代码导出pdf合并单元格 接上篇博客 java导出pdf(纯代码实现) 后有一部分猿友叫我提供一下源码,实际上我的源码已经贴在帖子上了,都是同样的步骤,只是加多一点设置就可以了。今天我再次上传一下相对情况比较完整…

开源预约挂号平台 - 从0到上线

文章目录 开源预约挂号平台 - 从0到上线演示地址源码地址可以学到的技术前端技术后端技术部署上线开发工具其他技术业务功能 项目讲解前端创建项目 - 安装PNPM - 使用VSCODE - 安装插件首页顶部与底部 - 封装组建 - 使用scss左右布局中间内容部分路由 - vue-routerBANNER- 走马…

重装系统以后无法git跟踪

总结:权限问题 故障定位 解决方案: 复制一份新的文件夹。(新建的文件创建和写入权限都变了) 修改文件为新的用户 执行提示的命令

SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API进行要素查询

作者:yx 前言 前面我们介绍了SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载,这里呢我们再来看看如何进行要素查询呢? 一、服务发布 SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载已经介绍如何发…

日志框架简介-Slf4j+Logback入门实践 | 京东云技术团队

前言 随着互联网和大数据的迅猛发展,分布式日志系统和日志分析系统已广泛应用,几乎所有应用程序都使用各种日志框架记录程序运行信息。因此,作为工程师,了解主流的日志记录框架非常重要。虽然应用程序的运行结果不受日志的有无影…