.NET其实就是一个软件平台,这个平台和Java平台有许多的相似之处,主要表现在
1、二者编写的程序都是可以跨平台执行的
2、二者编写的程序编译后生成的都是一种中间码(IL),需要经过第二次编译才能转换成本地所能执行的代码(Native Code)。这一特征正是.NET和Java的程序可以跨平台执行的根本原因
IL如下图所示

3、二者在B/S(Broser/Server)开发方面都很强大。
下面具体介绍这些特征
跨平台执行
无论是哪种操作系统,只要那个操作系统上装有对应的.NET FrameWork,那么只要是用.NET编写和编译的程序都可以在该平台上执行。因为软件被编译成为IL的组件(.EXE或.DLL)这些组件与具体的.NET语言和操作系统无关,IL的语法大体上都是一样的。

编译生成中间码,需要相应的.NET Framework中的即时编译器进行第二次编译生成原生码(Native Code)后才能被CPU执行,就像Java程序需要Java虚拟机(JVM)进行第二次编译才能执行一样。下面是.NET程序和JAVA程序的执行原理
.NET的执行原理

.JAVA的执行原理

在B/S开发方面功能强大
.NET的BCL(基底类别库)中提供的ASP.NET的类对B/S的开发很是便利。
.NET FrameWork主要有两部分构成:CLR(公共语言运行时)和BCL(基底类别库)。其实CLR和BCL也都是由组件构成的。
CLR的构成

BCL的构成

BCL的组件都是存在于系统文件夹GAC(Global Assembly Cache)中的,一些有数位签章的类也注册在这个文件夹里,在这个文件夹中的组件是可以被所有软件所共用的