.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.mfbz.cn/a/276479.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉与自然语言处理(Open AI)

1.语音识别技术 语音识别是将语音转换为文本的技术, 是自然语言处理的一个分支。通过特征的提取、模式的匹配将语音信号变为文本或命令,以实现机器识别和理解语音。 按照应用场景的不同,可以大致分为三类; • 电信级系统应用&…

【云原生•容器】容器的崛起之路•下

【云原生•容器】容器的崛起之路 Docker 「从2006年亚马逊云推出,到2009年国内互联网大厂的纷纷跟进,再到2010年中国将其纳入战略性产业,云计算进入快速发展期,云时代正式来临。大家看中云计算平台主要基于其美好愿景:…

跨境电商卖家一般用海外云手机做什么?

近些年,海外云手机在跨境电商领域已经逐渐流行开来,但是对于许多人来说海外云手机还是比较陌生,它有什么作用?它可以用于哪些场景?在本文中,我们将详细跨境电商卖家一般是怎样使用海外云手机的。 1. 海外网…

AI绘图软件,科技之旅绘画

科技与艺术的碰撞总能产生令人惊叹的火花,现在小编要给大家介绍一款引领未来艺术潮流的AI绘图软件——首助编辑高手。这是一款将人工智能与创意绘画完美结合的软件,它将为你打开一扇全新的创意之门。 所需工具: 一个【首助编辑高手】软件 …

数据结构 day6 栈+队列+二分查找+插入排序

插入排序 #include <stdio.h> #include<string.h> #include<stdlib.h> int main(int argc, const char *argv[]) {int a[]{41,50,66,38,32,49,18};int nsizeof(a)/sizeof(a[0]);int i,j,t;for(i1;i<n;i){int ta[i];for(ji-1;j>0;j--){if(t<a[j]){a…

Python入门-字符串Str

字符串 字符串 是Python中的 不可变 数据类型 1.字符串相关处理方法 大小写转换 # 大小写转换 s1HelloWorld new_s2s1.lower() print(s1,new_s2)new_s3s1.upper() print(new_s3)结果&#xff1a; D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap6\示例6-1字符…

python-39-flask+nginx+Gunicorn的组合应用

flask nginx Gunicorn 王炸 1 flasknginxgunicornsupervisor 1.1 myapp.py from flask import Flask app Flask(__name__)app.route("/") def test_link():return "the link is very good"if __name__"__main__":app.run()默认是5000端口…

C语言实现RSA算法加解密

使用c语言实现了RSA加解密算法&#xff0c;可以加解密文件和字符串。 rsa算法原理 选择两个大素数p和q&#xff1b;计算n p * q;计算φ(n)(p-1)(q-1)&#xff1b;选择与φ(n)互素的整数d&#xff1b;由de1 mod φ(n)计算得到e&#xff1b;公钥是(e, n), 私钥是(d, n);假设明…

SASS循环

<template><div><button class"btn type-1">默认按钮</button><button class"type-2">主要按钮</button><button class"type-3">成功按钮</button><button class"type-4">信息…

【Linux学习笔记】解析Linux系统内核:架构、功能、工作原理和发展趋势

操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体&#xff0c;它们互相依赖&#xff0c;不可分割。计算机的硬件&#xff0c;含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是…

【Spark精讲】一文讲透Spark RDD

MapReduce的缺陷 MR虽然在编程接口的种类和丰富程度上已经比较完善了&#xff0c;但这些系统普遍都缺乏操作分布式内存的接口抽象&#xff0c;导致很多应用在性能上非常低效 。 这些应用的共同特点是需要在多个并行操 作之间重用工作数据集 &#xff0c;典型的场景就是机器学习…

uniapp中uview组件库丰富LoadingPage 加载页

目录 基本使用 #显示或隐藏 #文字内容 #动画模式 #动画图片 #文字颜色 #文字大小 #图标大小 2.0.32 #背景颜色 #图标颜色 API #Props 基本使用 <template><view><u-loading-page></u-loading-page></view> </template>#显示或…

golang第五卷---包以及常用内置包归纳

包以及常用内置包归纳 包的概念math包time包sync包 Go 语言官方的包文档网站&#xff1a;包文档 包的概念 Go语言是使用包来组织源代码的&#xff0c;包&#xff08;package&#xff09;是多个 Go 源码的集合&#xff0c;是一种高级的代码复用方案。 任何源代码文件必须属于某…

Spark 集群搭建

文章目录 搭建前准备安装搭建解压并重命名环境变量配置配置文件yarn-site.xmlspark-env.sh 官网求 π(PI) 案例启动spark-shell通过浏览器查看显示查看 Spark 的网页信息展示 搭建前准备 下载地址&#xff1a;Index of /dist/spark (apache.org) 配置好 hadoop 环境&#xff…

2022年全国职业院校技能大赛(高职组)“云计算”赛项赛卷①第二场次:容器云

2022年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算”赛项赛卷1 第二场次&#xff1a;容器云&#xff08;40分&#xff09; 目录 2022年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算”赛项赛卷1 第二场次&#xff1a;容器云&#xff08…

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

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

阿里云30个公共云地域、89个可用区、5个金融云和政务云地域

阿里云基础设施目前已面向全球四大洲&#xff0c;公共云地域开服运营30个公共云地域、89个可用区&#xff0c;此外还拥有5个金融云、政务云地域&#xff0c;并且致力于持续的新地域规划和建设&#xff0c;从而更好的满足用户多样化的业务和场景需求。伴随着基础设施的加速投入和…

【机器学习】深度学习概论(一)

经典的机器学习算法与深度学习对比 一、机器学习面临的挑战 1.1 机器学习算法用于各种应用问题时所利用的典型特征 1.2 采用人工特征的机器学习算法处理流程 1.3 人工设计特征面临的问题 二、 深度学习技术 2.1 采用受限玻尔兹曼机和逐层训练的方法训练深层网络 2.2 自动编码器…

首次使用TypeScript,报错:无法重新声明块级范围变量(声明变量报错)

前几天在书写TypeScript代码时&#xff0c;出现了声明变量报错的情况&#xff0c;具体情况如下&#xff1a; let arr: number; arr 10; console.log(arr);报错如下&#xff1a; 解决方案&#xff1a; 在配置文件tsconfig.json中&#xff0c;配置如下代码&#xff1a; { &q…

js_常用事件演示

✨前言✨ 1.如果代码对您有帮助 欢迎点赞&#x1f44d;收藏⭐哟 后面如有问题可以私信评论哟&#x1f5d2;️ 2.博主后面将持续更新哟&#x1f618;&#x1f389;文章目录 &#x1f354;一、在JavaScript中什么是事件&#xff1f;&#x1f35f;二、为什么要使用事件&#x…