笔记:.NET的框架梳理及相关概念了解(“.NET Core“ “.NET“ “.NET Framework“)

一、.NET设计

  1. 架构:C/C++程序是直接将源码编译成机器码(CPU可以识别和运行的指令),对于不同CPU,其指令集不同,机器码也就不同,故:C/C++程序编译时,需选择具体的CPU架构,如:X86、X64、ARM等。
  2. 系统:C/C++语言的标准具有滞后性,程序需要的功能在标准中未必支持,但操作系统已提供(如:网络库、线程库等),且不同操作系统提供的库和API不同,故:程序需要解决系统兼容性问题。
  3. 综上:.NET设计了一种软件实现方式,即:在编译和机器码之间再抽象出一层中间层,通过中间层来屏蔽系统和架构的不同,中间层的指令被称为中间语言。

二、.NET框架


语言层 :"C#" "F#" "VB"


中间层 :"中间语言"


实现层 :".NET Core" ".NET" ".NET Framework" "Mono" "Xamarin" "UWP"


".NET Core" 5.0及其以后的版本改名为".NET",去掉Core关键字。

注意:语言层有语法标准,中间层有中间语言标准,但是实现层并没有统一的标准,导致编译时必须选择具体的实现层,.NET实现层的不同类似于C/C++下的CPU架构不同。

三、实现层的多套实现

".NET"、".NET Framework"、"Mono"等都是让"中间语言"能够在目标机器上能够正常运行的一种实现方式,即:对抽象的具象化实现

实现的组成:运行时、类库、开发工具(可选)和框架(可选)等。

为什么实现层会有多套实现逻辑呢?

主要还是因为需求的不同,进而导致了实现的不同。

不同实现的应用场景如下:

.NET5及更高版本(以前称为 .NET Core) :支持服务器、云服务、桌面应用以及跨平台。
.NET Framework :包含一些特定于 Windows 的 API,因此只能在Windows下执行,无法跨平台,适合于Windows下的开发。
UWP(Universal Windows Platform) :为物联网 (IoT) 设备开发具有触控功能的Windows 应用程序。
Mono:特点是轻量级,占用内存较小,如:Android、macOS、iOS、tvOS 和 watchOS 上驱动 Xamarin 应用程序的运行时。

四、推动实现层的标准化(.NET Standard)

.NET Standard是实现层的一套标准。

实现层的每种实现都按照自己的版本规划对标准进行实现,即:每种实现除支持.NET Standard外,还具有自己的一些特性,是.NET Standard的超集。

若程序的实现层选择.NET Standard,那么就可以在所有支持.NET Standard的实现中运行,无需再为不同的实现生成不同的库。

五、常见术语

运行时(runtime) :通常指托管程序的运行环境。
托管代码(managed code) :托管代码就是执行过程交由运行时管理的代码。
非托管代码(unmanaged code ):C/C++程序的运行代码称为"非托管代码"。
托管代码来源 :由 .NET 的高级语言(例如 C#、Visual Basic、F# 等)编译后得到。
机器码(machine code):可以被CPU识别和运行的代码。

用编译器编译语言编写的代码得到中间语言代码,无法获得机器代码,在运行时会对其中间语言代码进行编译,才会得到机器代码,再交由CPU执行。

C++ 能够直接生成可在 Windows 上运行的机器码,而非托管代码。

公共语言运行时 (Common Language Runtime: CLR) :负责提取托管代码、将其编译成机器代码,然后执行它。
中间语言(Intermediate Language: IL) : 由.NET高级语言编译后得到的产物,中间语言独立于.NET高级语言,有自己的规范标准。
公共中间语言(Common Intermediate Language: CIL) :"中间语言"的别称。
实时编译(Just-In-Time: JIT, compiling):在应用程序运行时按需将 CIL 转换为机器码。

六、参考资料

《.NET官网教程》
《.NET 术语表》
《.NET 实现》
《.NET Standard》
《托管代码》

相关推荐
LHNC7 分钟前
9.18 微信小程序开发笔记
笔记
GEEKVIP1 小时前
如何在没有备份的情况下恢复 Mac 上丢失的数据
经验分享·笔记·安全·macos·电脑·笔记本电脑·改行学it
linly12193 小时前
python学习笔记目录
笔记·学习
·云扬·5 小时前
Shiro框架
笔记·学习·java-ee
__water6 小时前
『功能项目』QFrameWork框架重构OnGUI【63】
c#·unity引擎·重构背包框架
Crazy Struggle6 小时前
C# + WPF 音频播放器 界面优雅,体验良好
c#·wpf·音频播放器·本地播放器
LN花开富贵6 小时前
stm32g431rbt6芯片中VREF+是什么?在电路中怎么设计?
笔记·stm32·单片机·嵌入式硬件·学习
qq21084629536 小时前
【stm32笔记】使用rtt-studio与stm32CubeMx联合创建项目
笔记·stm32·嵌入式硬件
晨曦_子画6 小时前
C#实现指南:将文件夹与exe合并为一个exe
c#
花开莫与流年错_7 小时前
C# 继承父类,base指定构造函数
开发语言·c#·继承·base·构造函数