本章适合用我这种刚接触C#不久的同学=。=
1..net框架有两个主要组件:公共语言进行时CLR(Common Language Runtime)和框架类库FCL(Framework Class Library)
CLR(公共语言运行库,Common Language Runtime)和Java虚拟机一样也是一个运行时环境,是一个可由多种编程语言使用的运行环境。CLR的核心功能包括:内存管理、程序集加载、安全性、异常处理和线程同步,可由面向CLR的所有语言使用。并保证应用和底层操作系统之间必要的分离。CLR是.NET Framework的主要执行引擎。
FCL程序集,其中含 有几千个类型的定义,每个类型都提供了某种功能。
最下层蓝色部分是.NET Framework的基础,也是所有应用软件的基础。.NET Framework不是凭空出来的,实际上API,COM+,和一些相关驱动依然是它的基石。.NET Framework只不过是对这些前辈们进行了系统的封装和扩充,在这个过程中,吸取了Java框架的很多经验。关于Win32 API与.NET Framework API的对应关系,可以参考Microsoft Win32 to Microsoft .NET Framework API Map
除了蓝色部分以外,其他均为.NET Framework的主体。它是基于通用语言基础架构(Common Language Infrastructure,CLI)。
通用语言运行平台(Common Language Runtime,CLR),是对CLI这个架构在Windows平台的实现。
类库(Framework Class Library,FCL),所有在.NET能够使用的类库。分为两部分:
基类库Base Class Library(BCL) ,顾名思义,其中包含一些基础的类,如:IO,String,Net等等。它们可以直接使用或者被FCL中的其他类使用。
FCL中的其他类。这些类库基本上都是引用BCL,在这些类库的基础上做的扩充。如:Web Page is Unavailable,The Official Microsoft ASP.NET Site,Windows.Forms等等,它们是我们编写程序更加方便,专一。
公共语言规范Common Language Specification (CLS) 和公共类型系统Common Type System (CTS) ,是CLI的一部分内容,它们的目的是保证各种语言与.NET Framework的兼容性的。
例如:把C#中的int和VB中的Integer统一映射到System.Int32。
最顶层是各种语言,C#,VB,等等。
2. .net 的编译过程
C#语言要编程可以被CPU解析执行的代码需要两次编译:
第一次编译:将C#语言通过C#编译器编译成MSIL中间代码
第二次编译:将MSIL代码通过即时编译器(JIT)编译成CPU可以解析执行的代码,或者成为(平台专用代码)
IL为Intermediate Language,有时候也叫Microsoft Intermediate Language
中间语言使得在.Net中各种语言的方便交互成为了可能。
Java程序想要被CPU解析执行也需要两次编译:
第一次编译:将后缀名为java的文件通过Java编译器编译成后缀名为.class(字节码)文件
第二次编译:将.class文件通过Java虚拟机(jvm)编译成CPU可以解析的代码
参考资料: