.Net是何物?
.Net 不是编程语言也不是框架,而是一套技术体系的统称,又或者说是技术平台的代号
是一个包含编程语言、框架、IDE等产品的系列产品统称
包含
- 框架体系:.Net Framework、 .Net Core、 Mono 等
- 开发语言:c#、F#、VB 等
- 开发工具:VS、VSC 等
使用.Net平台,可以实现以下两点
- 跨语言:只要是面向.Net平台的编程语言,用其中一种语言编写的内容可以无缝用在另一种语言编写的程序中
- 跨平台:只需要编译一次,应用程序就可以运行在任意有.Net 框架实现的操作系统上。不依赖操作系统,也不依赖硬件环境
跨语言的实现
CLS(Common Language Specification)公共语言规范。是一组语言互操作的标准规范,具有语言间的共性。只要开发者遵照规则来编码,那么代码就能被任意.Net平台支持的语言所通用,可以通过不同的编程语言来创建应用程序
CTS(Common Type System)公共类型系统。设计面向.Net语言时需要遵循一个体系,这个体系就是CTS,CLS则是CTS的子级。一个编程语言,如果能够支持CTS,那么就称其为面向.Net平台的语言
CLI(Common Language Infrastructure)公共语言基础结构。是微软将CTS等内容提交给国际组织计算机制造联合会ECMA的一个工业标准
跨平台的实现
.Net 的跨语言是让各种语言支持.Net的规范CLI。早期的.Net系列产品主要为了给Windows操作系统服务,并没有跨平台的特性,即使跨语言也只是可以使用多语言开发Windows上的应用程序
跨平台实现基于.Net Framework的Mono和.Net Core,两者都是根据CLI和CLR实现的跨语言和跨平台
![](/qrcode.jpg)
.Net Framework
.Net Framework 在2002年推出1.0版本。是一个可以快速开发、部署网站服务及应用程序的开发框架。是windows中的一个组件,部分开源,主要用于开发windows下应用程序
包含:
- CLR(Common Language Runtime)公共语言运行时
- 虚拟执行系统
- .Net Framework类库等
只要支持CLS公共语言规范的语言都可以用于开发Windows下的各种应用程序和网站程序
BCL基础类库和FCL框架类库是这个框架体系中已经实现好的各种API
程序集的表现就是后缀为.dll 或 .exe格式的文件,包含:
- PE头、CLR头(程序的格式信息,入口方法、版本号等)
- CIL代码(通用中间代码)是介于源代码和机器码之间的代码,之后会通过CLR产生机器码。使用不同的代码进行开发,所以会将这些代码翻译为统一规范的中间代码
CLR是.Net Framework的基础,所有的.Net技术都是建立在此之上。是一个在执行时托管代码的代码,提供内存管理、线程管理等核心服务,又被称作.Net虚拟机。如果想要应用程序在目标操作系统上能够运行,就必须依靠.Net提供的CLR环境来支持,会把程序集中的CIL(IL)翻译成机器码,最终在操作系统上运行
.Net Framework是一个主要用于跨语言开发WIndows操作系统下的应用程序的框架结构,并不支持跨平台
.Net Core
.Net Core 是2016年推出的.Net Framework的新一代版本,是一个开源项目。主要目的是跨平台,是.Net技术框架组成在Windows、MacOS、类Linux系统下的具体实现。为不同操作系统实现对应的CLR。这样就可以在不同平台上将IL翻译成机器码最终在操作系统上运行
Mono
最早出现在2004年,Mono是基于.Net的CLI提供了.Net Framework的另一种实现。相对.Net Framework最大的区别是具备跨平台能力,不仅可以在Windows、MacOS、Linux上运行,还可以运行在PS3、XBOX、Wii等主机平台上
Mono利用.Net平台制定的CLI可以将多种语言编译成通用规范的CIL公共中间语言,再通过CLR将CIL转换成操作系统的原生代码,主要做的就是就是在各种操作系统上实现了对应的CLR内容。是在.Net Framework规则上进行的修改和删除