什么是.NET?

起源:比尔盖茨在2000年的Professional Developers Conference介绍了一个崭新的平台叫作Next Generation Windows Service,也就是后来的.NET。

软件层:.NET可以被看作是介于操作系统和编程语言之间的软件层,它可以支持多种编程语言,包括C#,VB.NET,C++,F#,等等。

用来产生托管代码的框架、平台:传统的编译方式是"源代码→编译→可执行文件",在.NET中编译方式是"源代码→编译→程序集→可执行文件"。编译后的程序集包含IL代码和元数据,在运行时再转换成机器代码。

按开发到执行阶段来说:开发阶段.NET提供了庞大的类库,在程序执行阶段,.NET提供了一个CLR运行时环境帮助我们实时编译程序、进行安全检查、执行垃圾回收,管理内存等。

规范:.NET包含了众多的规范,比如CIL,BCL, FCL, CTS, CLS,等等。

什么是IL?

IL,Intermediage Language,中间语言,并不是CPU可以直接执行的本地机器语言,在转换成计算机可以识别的指令之前,还要进行一个被称为"Just in time"的二次编译过程。在.NET框架下,任何语言,比如C++,VB.NET,C#,等等,在经过各自的编译器编译之后,都会被转换成中间语言。IL还有另外的2种叫法:CIL,Common Intermediate Language;MSIL, Microsoft Intermediate Language。

查看IL代码,参考这里:http://www.cnblogs.com/darrenji/p/3967669.html

什么是CLI?

CLI,Common Language Infrastructure, 公用语言基础, .NET的各种规范都遵循了这个标准。

什么是BCL?

BCL, Basic Class Library, .NE为我们提供的基类库。

创建一个控制台项目。

把鼠标停留在Console上,并按F12。

发现Console是System的成员,点击System。

发现System是mscorlib的成员,点击mscorlib。

发现mscorlib是一个程序集,位于C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll

也就是mscorlib包含了.NET的基类库。

string类型是否属于基类库呢?

把鼠标停留在string关键字上,并按F12。

发现string实际上是System.String类型,原来.NET为我们把关键字string和CLI标准System.String作了映射。

依此类推, btye映射了System.Byte, short映射了System.Int16, 等等。

像string, byte, short,等等,这些都是基元类型。所以,凡是把语言本省的关键字与CLI的类型映射起来的,都叫基元类型。

什么是FCL?

FCL, Framework Class Library, 框架类库,提供的类库更多,BCL是FCL的子集。比如,在ASP.NET MVC下提供了System.Web.MVC。

什么是CTS?

CTS, Common Type System, 公共类型系统。CTS规定了在编程语言中可以定义的方面,包括:类、结构、委托,类中的方法、字段、属性、事件等,还定义了一些约束,比如所有类型都隐式继承自System.Object类型。

什么是CLS?

CLS, Common Language Specification, 公共语言规范,必须完全符合CTS的标准,是CTS的子集。比如C#编译生成的程序集有很多类,VB编译生成的程序集也有很多类,现在VB编译需要引用C#程序集的某个类,怎么办呢?

我们需要让C#程序集中,需要被引用的这个类符合CLS规范,.NET为我们准备了CLSCompliant特性。

[assembly:CLSCompliant(true)]
public class SomeClass
{
}

什么是CLR?

CLR, Common Language Runtime, 公用语言运行时。IL代码需要通过CLR进行即时编译才能转换成机器代码。大致过程是:

编程语言代码编译生成程序集。程序集中的PE/COFF头包含了供Windows操作系统查看和使用的信息;CLR头告诉操作系统这是一个.NET程序集;程序集清单描述了程序集本身的信息,比如程序集标识、程序集包含的资源、组成程序集的文件,等等;元数据描述了程序集包含的内容,比如包含的模块、类型、类型成员、类型成员的可见性,等等。

CLR开始工作:管理应用程序域,加载和运行程序集, 安全检查, 将IL代码JIT编译成机器代码,异常处理, 垃圾回收,等等。

相关文章:

CLR如何加载程序集以及程序集版本策略   http://www.cnblogs.com/darrenji/p/4179916.html
查看是否安装.NET Framework、.NET Framework的版本号、CLR版本号   http://www.cnblogs.com/darrenji/p/3977406.html 
CLR是如何被加载并工作的   http://www.cnblogs.com/darrenji/p/4159259.html

什么是JIT?

JIT, just in time, 即时编译。在CLR中,把IL转换成机器代码的工作交给了JIT编译器。即时编译只在方法第一次被调用时发生。

什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT的更多相关文章

  1. .Net 面试题 3C(CTS,CLS,CLR)

    1.CTS(Common Type System)通用类型系统 CTS不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展.任何以.NET平台作为目标的语言必须建立它的数 ...

  2. CTS,CLS,CLR

    1)CTS通用类型系统(Common Type System) CTS不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展.任何以.NET平台作为目标的语言必须建立它的数 ...

  3. 浅谈CLR CTS CLS。。。

    So  The First Is CLR CLR的全程是Common Language Runtime 公共语言运行时 可以把他理解为包含运行.net程序的引擎 和 一堆符合公共语言基础(CLI)的类 ...

  4. “菜”鸟理解.NET Framework(CLI,CLR,CTS,CLS,BCL,FCL)

    既然要学.NET,就要先认识认识她,我不喜欢大段大段文字的东西,自己通过理解,画个图,来看看.NET的沉鱼落雁,闭月羞花之容. 最下层蓝色部分是.NET Framework的基础,也是所有应用软件的基 ...

  5. .NET Framework (代码库、通用类型系统CTS、CLR) 简介

    编译C#————>程序集(.exe..dll[MSIL]).元信息[数据信息].可选资源[图片.声音]) |                     | |                   ...

  6. .NET基础知识(一、认识.Net)

    参考链接:http://blog.csdn.net/shanyongxu/article/details/50849111 认识.NET平台 可能很多人问什么是.NET框架,它包含了哪些内容?为开发程 ...

  7. 挑战一下吧!C#测试开发工程师英语面试题

    1. Given a rectangular (cuboidal for the puritans) cake with a rectangular piece removed (any size o ...

  8. .NET题目(收集来自网络)

    1: .NET和c#有什么区别? 答: .NET一般是指.NET FrameWork框架,是一种平台,一种技术 c#是一种编程语言,是可以基于.NET平台的应用 2: c#中的委托是什么?事件是不是一 ...

  9. C#经典面试题及答案

    1.请你说说.net 中类和结构的区别? 答:结构和类具有大体的语法,但是结构受到的限制比类多.结构不能声明默认的的构造函数,为结构的副本是编译器创建和销毁的,所以不需要默认的构造函数和析构函数,结构 ...

随机推荐

  1. 查看IP以及连接数

    AWK: time awk 'BEGIN{while("netstat -an"|getline){if( $5 ~ /[1-255]/){split($5,t1,":& ...

  2. swapper进程【转】

    转自:https://blog.csdn.net/qq_27357145/article/details/80462292 LINUX进程小结 id为0的进程通常是调度进程,常常被称为交换进程(swa ...

  3. Python学习五|集合、布尔、字符串的一些特点

    #集合本身就像无值的字典 list1 = set([1,2,3,4]) list2 = {1,2,3,4} print('list1 == list2?:',list1==list2)#list1 = ...

  4. jenkins+jmeter结合使用

    事件背景:想实现jmeter每30分钟执行一次,但是夜里不能人工操作,结果度娘,汇总结果如下 1.配置jmeter测试环境,注意修改Jmeter的bin目录下jmeter.properties文件的配 ...

  5. 解决win10 关键错误开始菜单和cortana无法工作 的问题

    问题描述: 一次强制关机后出现了这个对话框,注销.重启均无法解决问题 解决过程[因为我用的英文版操作系统,所以截图都是英文,请大家自行对照自己的操作系统]: 1.ctrl+alt+del 打开任务管理 ...

  6. java 异常使用指南

    应该在以下情况使用异常: 1.)在恰当的级别处理问题.(在知道如何处理的情况下才捕获异常) 2.)解决问题并且重新调用异常的方法 3.)进行少许的修补,然后绕过异常发生的地方继续执行 4.)用别的数据 ...

  7. 029 RDD Join相关API,以及程序

    1.数据集 A表数据: 1 a 2 b 3 c B表数据: 1 aa1 1 aa2 2 bb1 2 bb2 2 bb3 4 dd1 2.join的分类 inner join left outer jo ...

  8. 各jQuery选择器的用法(转)

    这篇文章来介绍下jQuery的选择器. 选择器是jQuery的根基,在jQuery中,对事件处理.遍历DOM和Ajax操作都依 赖于选择器.因此,如果能熟练的使用选择器,不仅能简化代码,而且可以达到事 ...

  9. Netty---相关

    http://www.infoq.com/cn/articles/netty-million-level-push-service-design-points/ ChannelOption用到的soc ...

  10. css3 matrix 2D矩阵和canvas transform 2D矩阵

    一看到“2D矩阵”这个高大上的名词,有的同学可能会有种畏惧感,“矩阵”,看起来好高深的样子,我还是看点简单的吧.其实本文就很简单,你只需要有一点点css3 transform的基础就好. 没有前戏,直 ...