资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,11/7/2009,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第9章.NET框架及其类库,保定职业技术学院,第9章.NET框架及其类库,9.1 NET框架,9.2.NET应用程序的核心要素,9.3托管C+语言基础,9.4第一个托管C+应用程序,9.5专题讨论与作业设计,9.1 NET框架,1.NET 框架的目标,.NET 框架旨在实现下列具体目标:,提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在 Internet 上分布,或者是在远程执行的。,提供一个将软件部署和版本控制冲突最小化的代码执行环境。,提供一个保证代码(包括由未知的或不完全受信任的第三方创建的代码)安全执行的代码执行环境。,提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。,9.1 NET框架,1.NET 框架的目标,使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致。,按照工业标准生成所有通讯,以确保基于.NET 框架的代码可与任何其它代码集成。,2.NET框架的组成,.NET框架是一个可以构造、发布及运行Web服务的开发环境。,.NET框架平台包括两个方面:一个是运行时引擎(Runtime Engine),另一个是基础类库(Base Class Library)。,9.1 NET框架,2.NET框架的组成,公共语言运行库是.NET 框架的基础。用户可以将运行库看作一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理),而且还强制实施严格的类型安全以及可确保安全性和可靠性的其它形式的代码准确性。,.NET框架的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,可以使用它开发包含从传统的命令行或图形用户界面(GUI)应用程序到基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web services)在内的应用程序。,9.1 NET框架,9.1 NET框架,3.NET应用程序开发的类型,客户端应用程序在基于 Windows 的编程中最接近于传统风格的应用程序。这些是在桌面上显示窗口或窗体从而使用户能够执行任务的应用程序类型。客户端应用程序包括诸如字处理器和电子表格等应用程序以及自定义的业务应用程序(如数据输入工具、报告工具等等)。客户端应用程序通常使用窗口、菜单、按钮和其它 GUI 元素,并且它们可能访问本地资源(如文件系统)和外围设备(如打印机)。,服务器应用程序开发在托管领域中,服务器端应用程序是通过运行库宿主实现的。非托管应用程序承载公共语言运行库,后者使用户的自定义托管代码可以控制服务器的行为。此模型在获得主服务器的性能和可伸缩性的同时提供给公共语言运行库和类库的所有功能。,ASP.NET 是使开发人员能够使用.NET框架开发基于Web的应用程序的宿主环境。,9.2.NET应用程序的核心要素,1运行时库,.NET框架提供了一个运行时环境,这个环境叫做通用语言运行时(Common Language Runtime,简称CLR)。CLR可以管理代码的执行,并提供给开发人员进行开发时所需的服务。开发人员可以利用编译器和开发工具具有的运行时功能来开发托管的应用程序,托管应用程序使用的代码是由专门对CLR提供支持的编译器生成的托管代码。这种托管代码可以在设计和运行时,享受到跨语言集成、跨语言异常处理及统一调试等带来的好处。,公共语言运行库具有如下功能:公共语言运行库管理内存、线程执行、代码执行、代码安全验证、编译以及其它系统服务。,9.2.NET应用程序的核心要素,2中间语言,从表面上看托管的应用程序和以前的应用程序没有什么不同,当开发人员使用一种开发工具(例如VC+.NET),对符合.NET应用程序要求的源代码进行编译后,就会得到一个PE格式的可执行文件,这个文件里存储的不是我们所熟悉的本机代码,而是称为MSIL的中间语言代码。,在可以执行代码前,必须将MSIL转换为CPU特定的代码,这通常是通过实时(JIT)编译器完成的。由于公共语言运行库为它支持的每种计算机结构都提供了一种或多种 JIT 编译器,因此可以在任何受支持的结构上对同一组 MSIL 进行 JIT 编译和执行。,9.2.NET应用程序的核心要素,3 JIT编译器,在可以执行Microsoft中间语言(MSIL)之前,它必须由.NET框架实时(JIT)编译器转换为本机代码。本机代码是运行于 JIT 编译器所在的同一计算机结构上的CPU特定的代码。由于公共语言运行库为每种受支持的CPU结构都提供了JIT编译器,开发人员可以编写一组可在不同结构的计算机上进行JIT编译和执行的MSIL。,JIT编译考虑了在执行过程中某些代码可能永远不会被调用的事实。它不是花时间和内存将可移植可执行(PE)文件中的所有MSIL转换为本机代码,而是在执行期间根据需要转换MSIL并存储结果本机代码供后面的调用使用。,9.2.NET应用程序的核心要素,4程序集,一个Visual C+应用程序可以包含一个或多个程序集。程序集是类型和资源的集合,创建类型和资源的目的是为了共同工作和形成一个功能上的逻辑单元。程序集是可以在CLR下被共享和重用的功能单元,是具有可重用、版本化的和自我描述(通过元数据描述)的应用程序模块。它是可版本化的最小的单元。程序集可以分为动态程序集和静态程序集。不论是哪一种程序集,其中都有一个描述程序集中的元素如何相互关联的“额外”数据集合。元数据包含在一个配件清单中(manifest)中。,5应用程序域,应用程序域提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的隔离。可以在具有同等隔离级别单个进程中运行几个应用程序域,而不会造成进程间调用或进程间切换等方面的额外开销。在一个进程内运行多个应用程序的能力显著增强了服务器的可伸缩性。,9.2.NET应用程序的核心要素,6.NET框架类库和命名空间,.NET 框架类库是一个与公共语言运行库紧密集成的可重用的类型集合。该类库是面向对象的,并提供用户自己的托管代码可从中导出功能的类型。这不但使.NET 框架类型易于使用,而且还减少了学习.NET 框架的新功能所需要的时间。此外,第三方组件可与.NET 框架中的类无缝集成。,集合类将与.NET 框架中的类无缝地混合。正如对面向对象的类库所希望的那样,.NET 框架类型能够完成一系列常见编程任务(包括诸如字符串管理、数据收集、数据库连接以及文件访问等任务)。除这些常见任务之外,类库还包括支持多种专用开发方案的类型。,9.2.NET应用程序的核心要素,命名空间,用途描述,代表类,System,包含所有的基础类库和被每一个应用程序使用的类库,Object,Buffer,Byte,Char,Array,Int32,Exception,GC,String等,Systrm.Collections,管理对象集合的类库,ArryList,BitArray,Dictionary,Hashtable,Stack等,System.WinForms,包含可以进行图形用户接口开发的类型库,Button,CheckBox,DataGrid,FileDialog,Form,ListBox,MainMenu,MonthCalendar,NewFontDialog,RichEdit,ToolBarTreeView,System.OI,包含可以支持同步、非同步数据流读写的类型库,ByteStream,File,FileStream,MemoryStream,Path,StreamReader,StreamWriter,System.Reflection,包含可以从元数据中抽取信息的类型库,Assembly,ConstructorInfo,FieldInfo,MemberInfo,MethodInfo,Module,ParameterInfo,System.Data,包含基础数据库管理类型库,DataBinding,DataRelation,ataRow,DataSet,ataTable,DataSource,9.3托管C+语言基础,1托管类型,托管C+语言与传统的C+语言相比,语法上没有多大的变化,但是在数据类型上有了很大的改变,对于托管C+语言我们首先要学习托管数据类型。C+语言可以包含托管类型和非托管类型。托管类型是一种数据类型,该数据类型在托管堆上实例化(一般使用new 操作符),从不会在非托管堆或者栈上创建。托管类型是一种可以被CLR自动垃圾回收的类型,不需要用delete操作符来释放对象,此类对象不能直接删除。非托管类型是一种为垃圾回收器所忽略的数据类型,程序员需要用delete操作符来释放非托管类型的对象所占用的内存。,托管C+类型总体上分为值类型和引用类型。值类型又分为内置值类型(如整数类型、浮点类型)、用户定义值类型、枚举类型;引用类型又分为自描述类型、指针类型和接口类型。,9.3托管C+语言基础,2.值类型,大多数编程语言提供内置的数据类型(比如整数和浮点数),这些数据类型会在作为参数传递时被复制(即它们通过值来传递)。在.NET 框架中,这些称为值类型。运行库支持两种值类型:内置值类型和用户定义的值类型。,(1)内置值类型,.NET 框架定义了内置值类型(如 System.Int32 和 System.Boolean),它们对应于编程语言使用的基元数据类型并与之相同。表9.2列出了.NET 框架支持的一些值类型,简要描述了每个类型,并指示C+托管扩展中的相应类型。表中还包括 Object 和 String 类的项,这些项在许多语言中都有相应的关键字。,9.3托管C+语言基础,(2)自定义值类型,值类型和垃圾收集类不同,前者可以在运行时堆栈上分配并且在特定条件下可以被当作静态变量或堆分配变量。值类可以在类或结构声明之前添加_value关键字。值类的定义方式如下:,_value class_spcifier 或者,_value struct_specifier,例如,下面的代码定义了两个值类:,_value class myClassA,;,9.3托管C+语言基础,3.垃圾回收类,垃圾回收类又称为引用类型,前面我们已经提到了“垃圾收集”,对于程序员来讲,垃圾收集类为我们提供了几方面的功能:其一是,在垃圾收集堆上创建对象的速度比传统的Win32堆上快;其二是,在垃圾收集堆上创建的对象可以被系统自动回收,不必对资源进行人工释放。垃圾收集类的定义方法是使用_gc关键字,使用格式如下:,_gc class_specifier,_gc struct_specifier,_gc interface_specifier,9.3托管C+语言基础,(1)接口类型,在托管的C+中,接口类型体现了托管的优点,定义托管的关键字为_interface,如果定义一个托管的C+接口,在_interface前面还需加上_gc关键字。下面是定义一个托管接口的代码:,/定义一个托管的C+类接口,_gc_interface Imyinterface,void Method1();,;,9.3托管C+语言基础,(2)指针类型,指针是特殊类型的变量。运行库支持三种指针:托管指针、非托管指针和非托管函数指针。,托管指针(也称为 _gc 指针)是托管应用程序使用的一种新型指针。托管指针指向公共语言运行库堆的托管内存块。此堆上执行自动垃圾回收。托管指针是为通过引用传递的方法参数而产生的。某些语言提供了产生托管指针的其它方式。只有托管指针才符合 CLS。,不需要显式定义指针类型。在声明指针时,就确定了指针类型
展开阅读全文