C#
是一种简单、现代、面向对象和类型安全的编程语言。。
.NET
是由 Microsoft 创建的开发平台,平台包含了语言规范、工具、运行,支持开发各种应用,如Web、移动、桌面等。.NET框架有多个实现,如.NET Framework
、.NET Core
(及后续的.NET 5+版本),以及社区版本Mono
。除此以外,C#.NET体系还有很多概念,本文就来简单了解下C#、.NET Framework、CLR、.NETCore、CTS、JIT等概念。
01、.NET发展历史: Framework ⇒ Core
简单梳理一下.NET框架的发展:.NET Framework
⇒.NET (Core)
。表格原文原文连接。
- LTS:long time support,长期支持版本(3年左右),非LTS版本支持周期18个月左右。
- RC:Release Candidate,候选正式版本,可作为正式版本使用。
推荐一个在线的版本,做的非常漂亮:Microsoft .NET History
🔸.NET Framework(1.0 —— 4.8.1):.NET Framework
是基于Windows系统的.NET
框架,从2002年发布,到最新的4.8.*版本,已经停止发展。
- 最后的
4.8.*
版本依然还在维护,还是可以使用的,支持的最低操作系统是Windows 7。 - 如果要运行在XP系统上,则只能使用
.NET Framework4
版本,支持最低Windows XP SP3。 .NET Framework
是基于Windows系统的,因此也只能在Windows系统上运行。
🔸.NET Core(Core1/2/3,5/6/7/8/9):从2016年发布首个.NET Core1
,和后面的.NET Core2/3、.NET 5/6/7/*是一个体系的,只是从.NET5
开始更改了命名。这是微软推出的新一代.NET框架,用来代替原有的.NET Framework
,核心特点就是开源、跨平台,这也是.NET未来重点发展、投资的地方。
- 开源,采用MIT和Apache协议作为开源协议,对商业十分友好。
- 跨平台,支持Windows、MacOS、Linux,支持x64,、x86、ARM架构。
02、.NET Framework框架
.NET Framework 是运行在 Windows 系列操作系统上的一个系统应用程序。它是 .NET 的核心部分,提供了建立和运行 .NET 应用程序所需要的编辑、 编译等核心服务。它包括2个重要组成部分:公共语言运行时 (Common Language Runtime,CLR) 和 .NET Framework 类库(Framework Class Library,FCL)。
🚩对于Framework:
.NET Framework
设计之初就是基于Windows系统的,其API与Windows底层接口紧密关联,所以DotNET应用也只能运行在Windows系统上了。同时,.NET Framework
也作为Windows操作系统的组件内置在操作系统中。- 同一台电脑上可以同时安装多个版本的 .NET Framework 版本。
- .NET Framework = 运行时CLR + 类库FCL。
📢为了解决跨平台的问题,早期是社区开源的
Mono
,后来就是Mono
被微软收购后,统一实现并开源了全新的.NET Core
框架。不过两者很多技术、概念是一样的。
2.1、运行时(CLR)
公共语言运行时 (Common Language Runtime,CLR), CLR 本质上就是.NET 虚拟机(类似Java的虚拟机JVM),算是.NET的引擎,用来执行托管.NET代码,确切的说是编译后的IL代码。提供管理内存、线程执行、代码执行、代码安全验证、异常处理、编译、垃圾回收等运行时服务。
图来源:clr-full-form
- 类加载器(Class Loader):加载程序集的类(包括方法)、元数据,及其他程序所需组件。
- 即时编译器JIT(Just-In-Time,简称JIT ):负责将中间代码MSIL翻译成本机执行代码(MSIL to Native Code)。
- 代码管理器(Code Manager):管理代码的执行。
- 垃圾回收器GC(Garbage Collector):负责整个.NET运行时托管代码的内存分配与释放任务,它通过一定的优化算法选择收集对象和时间,并进行自动的垃圾收集。
- 安全引擎(Security Engine):提供基于认证的安全机制,如用户身份。
- 调试引擎(Debug Engine):使开发者能调试和跟踪应用程序代码。
- 类型检查器(Type Checker):检查并禁止非安全的类型转换以及未初始化的变量的使用。
- 异常管理器(Exception Manager):提供结构化的异常处理,与Windows结构化异常处理机制(SHE)集成,改进了错误报告。
- 线程支持(Thread Support):提供了多线程编程的类和接口。
CLR是
.NET
的核心,当我们学习了基本C#语法后,想要进一步进阶,就必须了解CLR的机制了。
2.2、CTS(通用类型系统)与CLS(通用语言规范)
.NET CLR是支持多种语言的,如C#、F#、VB等,这些语言编译后都可以在CLR上执行,还支持不同语言的互操作,比如在C#类继承一个VB写的类,在C#中调用F#写的一个方法等。
实现这种不同语言之间交互的基础就是这些语言都遵循统一的规范和要求 —— CTS(通用类型系统),CTS定义了一套通用的数据类型系统,包括值类型、引用类型的结构。比如C#中int、VB中的Interger都是整形,对应CTS中的Int32。
CLS是CTS的子集,规定了语言编译器必须遵循的一组规则,以便创建在 CLR 中运行的 .NET 应用程序。可以把CTS看做是规范,CLR是对CTS的具体实现。
图来源:.NET的分层与概念
🔸CTS(Common Type System)通用类型系统
微软制定了一个正式的规范来描述类型的定义和行为,这就是“通用类型系统”(Commo