学了那么久C#,.NET,一直很盲,知道最近才了解到什么是.NET,什么是C#,CLR,JIT,IL等。分享出来,希望能帮助同学们理解.NET。
(水平有限,还望多指点哈哈)
概念介绍
什么是.NET?
.NET Framework(.NET Framework) 是由微软开发,一个致力于敏捷软件开发(Agile software development)、快速应用开发(Rapid application development)、平台无关性和网络透明化的软件开发平台(引自wikipedia)。
.NET并非一门语言,狭义理解可以是运行一个语言的框架,.NET以CLR(Common Language Runtime,通用语言运行库)为基础。它支持C#,VB,C++等语言,或者这句话让人会误解,事实上CLR不直接运行这些语言,而是运行由这些语言生成的中间语言IL(后面介绍)。
什么是CLR?
CLR(Common Language Runtime,通用语言运行库)是.NET平台的核心,与JAVA的JVM类似功能,也有人将CLR成为.NET的虚拟机,正如前面所说,CLR是一个运行时环境,负责.NET运行时进程线程管理,资源管理和,类型封装等。
JIT:即时编译,在运行是把IL代码编译成能在本机直接执行的指令集。
通俗地讲:CLR是IL的运行环境,JIT是IL的编译器,CLR和IL是影响.NET程序执行效率的主要因素。
什么是IL?
中间语言(Intermediate Language),可以理解成.NET平台的汇编,支持面向对象特性。下面我们看下HelloWorld
using System;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.Write("HelloWorld!");
}
}
}
生成一下,并打开IL反汇编器反汇编HelloWorld程序

双击Main方法可查看IL指令集
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// 代码大小 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "HelloWorld!"
IL_0006: call void [mscorlib]System.Console::Write(string)
IL_000b: nop
IL_000c: ret
} // end of method Program::Main
这就是CLR所能运行的指令。相当于C语言要运行必须先把C代码编译成汇编指令,再由机器运行。学习IL有助于深入理解.NET,CLR。
什么是C#?
面向对象高级程序设计语言,这个应该不陌生。但C#不等于.NET,C#只是.NET平台上被最广泛采用的程序设计语言。除了C#,你还可以用VB,C++,F#等作为开发语言,这些语言都会被编译成IL代码执行于CLR,如果你懂编译原理,你甚至可以将JAVA应用到.NET,也可以设置你自己的语言,你所需要做的只是把你设置的语言的代码编译转换成可执行的IL指令集。
图解.NET

在.NET平台上你所写的代码是这样最终被执行的。理解这幅图,重新去看上面概念介绍或者更简单吧。

浙公网安备 33010602011771号