.Net FrameWork 是为其运行的应用程序提供各种服务的托管执行环境,它包括两个组件,执行引擎公共语言运行时(CLR);以及.Net FrameWork 类库。
CLR是.NET FrameWork 的核心,
CLR的核心是CTS和CLS,任何编程语言,如果想要在.NET CLR上执行,就必须提供一个编译器,
编译成.NET CLR所认识的metadata以及IL,符合CTS的规定。
CTS 是通用类型系统(Common Type System)
CLS是公共语言定义(Common Language Specification)
CLR是公共语言运行时(Common language runtime)
CTS定义了一组语言编译器必须遵循的规则,以定义、引用、使用和存储引用类型和值类型
CLR的执行模型
将源代码(vb、cs)编译成 托管代码块。托管代码块由中间语言和元数据组成。
将托管代码合并成程序集,也叫组件(dll)。程序集中包含了一张叫做“清单”的模块记录了构成程序 集模块构成的信息包括资源文件及需要引用自己的信息。
加载公共语言运行库。
执行程序集的代码。
生成本地代码。
CLI,公共语言基础架构
BCL,基础类库(Base Class Library)
BCL是一个公共编程框架,称为基类库,所有语言的开发者都能利用它。
主要包括:执行网络操作,执行I/O操作,安全管理,文本操作,数据库操作,XML操作,与事件日志交互,跟踪和一些诊断操作,使用非托管代码,创建与调用动态代码等,粒度相对较小,为所有框架提供基础支持。
FCL,框架类库(Framework Class Library)
FCL提供了大粒度的编程框架,它是针对不同应用设计的框架 ,FCL大部分实现都引用了BCL
托管代码就是Visual Basic .NET和C#编译器编译出来的代码,托管代码在公共语言运行库(CLR)中运行
非托管代码是运行在公共语言运行库环境(CLR)的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务
区别:
1、托管代码是一种中间语言,运行在CLR上;
非托管代码被编译为机器码,运行在机器上。
2、托管代码独立于平台和语言,能更好的实现不同语言平台之间的兼容;
非托管代码依赖于平台和语言。
3、托管代码可享受CLR提供的服务(如安全检测、垃圾回收等),不需要自己完成这些操作;
非托管代码需要自己提供安全检测、垃圾回收等操作。
4、.Net有很多非托管的资源,比如StreamWriter、 Timer、数据库连接。
unsafe可以用来修饰类、类的成员函数、类的全局变量,但不能用来修饰类成员函数内的局部变量
运行unsafe ,需要设置:
单击“配置属性”文件夹。单击“生成”属性页。 修改“允许不安全代码块”属性
1.IL/MSIL/CIL Microsoft Intermediate Language)微软中间语言(IL是MSIL的缩写,译为中间语言)
2.CTS (Common Type System)通用类型系统
3.CLS (Common Language Specification)公共语言规范
4.CLR (Common Language Runtime)公共语言运行时(也有的叫公共语言运行库)
5.JIT (Just in time)即时编译器
6.CLI 公共语言基础架构(Common Language Infrastructure)
7. BCL 基础类库(Base Class Library)
8. FCL 框架类库(Framework Class Library)
原文地址:https://www.cnblogs.com/zhangdonglei/p/11140497.html