C#&.NET(一):.NET之道
2014-04-25 20:08 WangSeaQuan 阅读(507) 评论(0) 收藏 举报.NET平台层次结构如下:

其中,公共语言运行库(Common Language Runtime)主要是为我们定位、加载和管理.NET类型,同时也负责一些底层细节的工作,如内存管理、应用托管、处理线程、安全检查等。CLR中最重要的部分是mscoree.dll库(又称公共对象运行库执行引擎),当用户程序引用一个程序集时,mscoree.dll将首先自动加载,然后由它负责将需要的程序集导入内存,在此过程中,引擎完成的任务有解析程序集的位置,读取其中包含的元数据,发现二进制文件中的请求类型。这些任务完成后,CLR在内存中为类型布局,将关联的CIL编译成特定平台的指令,执行必要的安全检查,然后运行当前代码。 除了导入自定义的程序集和建立自定义的类型,必要时CLR也会与基础类库中的类型进行交互。
基础类库(Base Class Library)不仅封装了各种基本类型,如线程、数据库访问、GUI桌面API、安全、远程处理API、文件输入输出、Web API等,还支持实际应用中用到的一些服务。虽然基础类库应不同需求分为若干的程序集,但最重要的程序集是mscorlib.dll,此程序集中包含大量核心类型,它们封装了各种常见的编程任务和.NET语言用到的核心数据类型。
公共语言规范(Common Language Specification)是一个相关规范,定义了一个让所有.NET语言都支持的公共类型和编程结构的子集,也就是公共类型系统(Common Type System)的子集,遵循CLS规则的语言才能与其他.NET语言互操作。
C#,一个以C++和Java语法为基础开发的面向对象语言,是.NET开发的首选语言,需要注意的是C#只能在.NET运行库中执行,俗称托管代码,反之,如C/C++,可以直接构建本机的API程序,那么就称C/C++为非托管代码。包含托管代码的二进制单元为程序集(assembly),虽然程序集和非托管的二进制文件的扩展名都是*.dll或*.exe,但是它们内部却完全不同,具体的说,程序集(.NET二进制文件)不包含特定于平台的指令,它包含的是平台无关的公共中间语言Common Intermediate Language(与Java的字节码类似)和类型元数据,类型元数据详尽的描述二进制文件中每个类型的特征。此外,程序集本身也使用元数据进行描述,这种元数据称为清单(manifest),记录了本程序集的版本信息、文化信息(用于本地字符串和图像资源)和正确执行时所需的外部引用程序集列表。
CIL(公共中间语言)代码必须在使用之前进行即时编译,将CIL代码编译成有意义的CPU指令的工具称为JIT(just in time 即时)编译器,亦称Jitter。.NET运行库环境将使用针对不同CPU的JIT编译器,每个编译器都会针对底层平台进行优化。当给定的JIT编译器将CIL编译成机器代码时,会将机器代码缓存在内存中,下次再调用相同的CIL代码时,就无需再编译了,可直接从内存中获取。
与.NET Framework SDK同时发布的中间语言反汇编工具(ildasm.exe)可以加载任意的.NET程序集并分析它的内容,包含关联的清单、CIL代码和类型元数据。在Developer Command Prompt中直接输入ildasm即可运行。
浙公网安备 33010602011771号