.Net 框架程序设计(1)

来源:互联网 发布:防火墙软件有哪些 编辑:程序博客网 时间:2024/06/04 20:13

1  .Net 框架组成

         .Net 框架包含两个部分:通用语言运行时(CLR)和框架类库(FCL)。

      CLR是Common Language Runtime的简称,它是一个运行时环境,在程序运行时负债内存的分配和资源的回收,对代码执行严格的类型安全检查,并保证应用程序和操作系统间有效的分离。它内置一个JITCompiler,在程序启动后把编译后的IL代码即时的转换成cpu指令,这样的设计保证了可以用不同的开发语言描述的类型可以无缝的集成。

      FCL是Framework Class Library的简称,它是一个类库,包含一组程序集,这些程序集为我们提供了丰富的功能。在.Net平台下所有的类型都继承自Object,我们自定义的类型如果没有显示的定义基类型,默认的情况下就是继承Object。用这些程序集可以开发多种的应用程序,GUI、CUI、WEB、XML Service等等。

2   CLR和FCL优势

     1)统一的编程模型

          在.Net框架下,所有的应用程序都将以一种一致的、面向对象的编程模型提供给开发人员。

     2)可靠的版本机制

               .Net框架采用了一种新型的版本机制来隔离应用程序组件,这种隔离可以保证应用程序在执行时总是能加载它生成和测试时所使用那个版本的组件,这就避免了“DLL  hell”。这也确保了多个版本的组件可以共存在相同的目录下而不出现问题,visual studio.net 的多个版本可以同时装在一个操作系统中就是这个原理。在没有这个机制前,我们的DLL是靠名称进行区分的,多个公司可能会出现相同的名称的DLL或者同一个公司的不同的版本的DLL,当发布时后来的DLL可能会覆盖原有的,让其他一些程序出现莫名的错误。

     3)多平台支持

           在.Net框架下,我们的源代码被编译器编译后生成的不是能够直接在CPU上执行的指令,而是一种全新的通用中间语言(Common Intermediate Language,简称CIL),也就是我们常说的托管模块,这些托管模块还需要CLR进行下一步的翻译,此时才转化为CPU指令,在本地上执行。这就意味着只要这台机器上装有与ECMA兼容的CLR和FCL,我们的应用程序就可以在这台机器上部署。

     4)无缝的语言集成

           所有面向CLR的语言都要遵循一种通用类型系统(Common Type System,简称CTS)的规范,在这个平台上使用的语言都要和CTS建立一种类型映射,如果CTS规定了一个基本类型XX,那么C#就有一个AA类型对应着XX,VB就会有一个BB类型对应着XX,如此等等。CTS是所有面向CLR的语言的超集,每种语言都是CTS的一个子集,。比如CTS规定了类型间的单继承方式,那么面向它的语言也应该是单继承的(除了有很强大的编译器能把多继承编译成单继承的IL)。而通用语言规范(Common Language Specification,简称CLS)则描述了一个语言要和其他语言进行互操作所必须遵循的规范,它是所有面向CLR语言的共同的部分,也只有完全按照CLS规范编写的类型才能被其他语言完全的集成。

     5)垃圾收集

          在.Net平台上开发的程序最终都交由CLR来运行,它负责内存的分配和资源的管理,我们不用再显示的释放对象所占的内存,CLR完全接替了我们的工作,它知道何时去释放内存空间。当然我们也可以显示的调用GC去发起垃圾收集,但微软不建议我们这样做,它的垃圾收集原理应该和java的vm的垃圾收集应该是异曲同工的。

     6)坚实的类型安全

         CLR可以确保所有的类型都是安全的,它不会执行类型不安全的代码。类型安全确保了系统分配的对象总能以正确的方式被访问,这和在非托管的应用程序中的指针有着鲜明的对比,我们不可能构造一个指向某个内存位置的任意引用,一旦发生这样的情况CLR会抛出异常阻止程序继续朝着不确定的方向发展。

     7)统一的错误报告

         以前的Window程序设计中报告错误的方式可以是一个Win32的状态码也可以是HRESULT也可以是异常,而.Net框架报告错误的方式就只有一个那就是抛出异常。异常可以把恢复代码和程序逻辑分开处理,同时它还提供了详细的错误信息以供我们快速的定位错误。CLR中的异常还具有跨越模块和语言的特性,异常会层层传递直到有类型去处理它,否则系统会抛出未处理的异常的错误。 

3  基本概念

      1)托管模块 

         托管模块(Managed Module):是一个需要CLR才能执行的标准的windows可移植可执行的文件。任何支持CLR的语言创建的源代码都会被相应的编译器编译成一个托管模块。托管模块主要有以下几部分组成:PE表头(文件的类型等)、CLR表头(托管模块所需要的CLR版本信息,入口点方法等)、元数据(元数据表,一种用于描述源代码中定义的类型和成员;一种是描述引用的类型和成员)、中间语言代码(在程序运行是由CLR翻译成本地CUP指令)等。

      2)程序集

         程序集(Assembly):是一个或多个托管模块,以及一些资源文件的逻辑组合。它提供了一种方式允许我们将一组文件看成是一个单独的实体,其实CLR并不和托管模块打交道,它能处理的最小对象是程序集。

         3)通用语言运行时

            通用语言运行时(Common Language Runtime):它是一个运行时环境,在程序运行时负债内存的分配和资源的回收,对代码执行严格的类型安全检查,并保证应用程序和操作系统间有效的分离。

      4) 框架类库

          框架类库(Framework Class Library ): 一组程序集,其中包含几千个类型的定义,每一个类型都提供了某种功能。

      5)通用中间语言

          通用中间语言(Common Intermediate Language):它是一个独立于CPU的新式的机器语言,也是CLR能识别的唯一语言,我们的源代码被编译器编译之后的机器语言。

      6)通用类型系统

          是CLR用于定义、使用和管理类型的规范。符合这个规范的任何语言都可以编写在CLR上运行程序,它是跨语言的重要一部分。

      7)通用语言规范

          描述了一个语言要和其他语言进行互操作所必须遵循的规范,它是所有面向CLR语言的共同的部分,也只有完全按照CLS规范编写的类型才能被其他语言完全的集成。