.NET 相关知识
--------------------------------------------------------前序--------------------------------------------------------
我们运行一个程序,CPU就会不断的读取程序中的指令并执行,直到关闭程序。
不同厂商的CPU有着不同的指令集,而这些指令集比较难读、难编、难记和易出错,
所以就出现了面向特定CPU的特定汇编语言。(如x86,x64,Any CPU)
不同CPU架构上的汇编语言指令不同,而为了统一一套写法,同时又不失汇编的表达能力,编程语言就诞生了。
编程语言所编写的代码文件转换成汇编指令的工具,称之为编译器。
--------------------------------------------------------NET--------------------------------------------------------
.NET是一个开发者平台。(跨平台,跨语言)。
.NET 实现
.NET Framework 是用于Windows应用程序的开发平台, 目前最高版本为.NET Framework 4.8(不再更新)。
.NET Core 是跨平台的开发平台,最高版本为.NET Core 3.1。
.NET 5 是最新的实现。
.NET Standard 是一种API开发规范,可让你为 .NET 的多个实现开发类库。
.NET 的集成开发环境包括:
Visual Studio: for windows
Visual Studio Core: for windows , macOS, Linux
Visual Studio fro Mac : for macOs
SDK和运行时
开发环境:需要安装SDK, 下载SDK时自动获取运行时。
运行环境:需要安装运行时。
术语:
公共语言运行时:用于托管程序的执行环境。 OS属于运行时环境,但不属于 .NET 运行时。
SDK:工具和库的集合。
--------------------------------------------------------C#---------------------------------------------------------
C#是一种面向.NET平台的高级编程语言。
--------------------------------------------------------CLS---------------------------------------------------------
Common Language Specification 公共语言规范:是一组语言互操作的标准规范。
--------------------------------------------------------CLS---------------------------------------------------------
CTS
Common Type System 公共类型系统是面向.NET编程语言所需要遵循的一个体系。
它包括但不限于:
1. 建立用于跨语言执行的框架。
2. 提供面向对象的模型,支持在.NET上实现各种语言。
3. 定义处理类型时所有语言必须遵守的一组规则(CLS)。
4. 提供了开发中使用的基本基元数据类型(如 Boolean、Byte、Char 等)的库。
CLS是CTS这个体系中的子集。
一个编程语言,如果它能够支持CTS,那么我们就称它为面向.NET平台的语言。
--------------------------------------------------------CLI---------------------------------------------------------
Common Language Infrastructure 公共语言基础结构,它是C#语言编译和执行时都要依赖的公共语言基础结构。
微软将CTS等内容提交给ECMA(国际组织计算机制造联合会)的一个工业标准。
--------------------------------------------------------CIL---------------------------------------------------------
Common Intermediate Language 公共中间语言,简称IL。
--------------------------------------------------------编译--------------------------------------------------------
JIT(Just-in-time compilation):即时编译。
AOT :预先编译
---------------------------------------------------------库---------------------------------------------------------
BCL(Base Class Library): 是微软所提出的一组标准库。
FCL:框架类库
当安装.NET Framework时,所有的基础类库被部署到全局程序集缓存(GAC)。它的位置一般在C:\Windows\assembly。
---------------------------------------------------------程序集---------------------------------------------------------
程序集
可以把程序集看成构成逻辑功能单元并为一起工作而生成的类型和资源的集合。
它构成了基于.NET应用程序的部署、版本控制、重用、安全权限的基本单元。
它以可执行文件(.exe)或类库文件(.dll)形式出现。
它可以含有多个命名空间,每个命名空间都有各自的IL和元数据(即托管模块)。CLR是和程序集一起工作的。
程序集是自描述的:它的清单部分含有它需要访问的其他程序集的名单。它的元数据包含了程序集中所有的类型和成员。它的IL包含了成员的实现。
程序集是可以配置的:
1. 私有配置:通过Add Reference,将程序集的dll文件拷贝到你的类库的子目录bin\Debug下。
2. 共享配置:GAC。
程序集的结构:
1. PE/COFF头:包含了供操作系统查看和利用的信息。Windows操作系统能够加载并运行.dll和.exe是因为它能够理解PE/COFF文件的格式。
2. CLR头:告诉操作系统这个PE/COFF文件是一个.NET程序集,区别于其他类型的可执行程序。
3. 清单(manifest):相当于一个目录,描述了程序集本身的信息.
4. 元数据
5. IL
6. 资源文件
---------------------------------------------------------元数据---------------------------------------------------------
程序集的重要组成部分,它包含了类型和成员。
功能:
a.智能感应。 b.确保可执行代码的类型安全。 c.序列化和反序列化的基础。 d.反射。
--------------------------------------------------------- GC---------------------------------------------------------
GC:Garbage Collector,垃圾收集器,能自动管理内存。
算法:Mark-Compact 标记压缩算法
对象:托管堆中的对象
原理:托管堆中的对象有个属性叫代(0代,1代,2代)。当0代内存满时,会检查所有0代对象是否需要回收。
是,打上标记.
否,则升代,检查1代内存是否满.....
,然后一起回收。
在heap中移动这些对象,heap内存空间变得连续。
---------------------------------------------------------代码编译---------------------------------------------------------
在开始运行.NET程序之前,编译器将代码转换为IL。
IL代码并不能直接运行,CLR将真正需要用到的程序集导入内存,读取元数据,
接着为类型开辟内存空间,执行所有需要的安全检查,并最终运行代码:

浙公网安备 33010602011771号