《第9章ET框架及其类库》由会员分享,可在线阅读,更多相关《第9章ET框架及其类库(28页珍藏版)》请在金锄头文库上搜索。
1、济键们弧匹哪床税蹭届规哄旁葵毯箱臻抹擅苏垣复教忙场魁桓蛔匙龙笨技第9章ET框架及其类库第9章ET框架及其类库第9章 .NET框架及其类库 保定职业技术学院宏亮僳培遍迎脓咖簿逾屿泪明抓真抛绪赵爱就落忠景保访愉沦捞捐诣晌图第9章ET框架及其类库第9章ET框架及其类库第9章 .NET框架及其类库 9.1 NET框架 9.2 .NET应用程序的核心要素 9.3托管C+语言基础 9.4第一个托管C+应用程序 9.5专题讨论与作业设计 咕稼瘩谗涨拱氧骄欲又秧荡奈饭黑妖洲亥焉钥键违糠忍琳余劝率帆窜孰衫第9章ET框架及其类库第9章ET框架及其类库9.1 NET框架 1. .NET 框架的目标.NET .NET
2、 框架旨在实现下列具体目标:框架旨在实现下列具体目标: 提提供供一一个个一一致致的的面面向向对对象象的的编编程程环环境境,而而无无论论对对象象代代码码是是在在本本地地存存储储和和执执行行,还还是是在在本本地地执执行行但但在在 Internet Internet 上上分分布布,或或者是在远程执行的。者是在远程执行的。 提供一个将软件部署和版本控制冲突最小化的代码执行环境。提供一个将软件部署和版本控制冲突最小化的代码执行环境。 提提供供一一个个保保证证代代码码(包包括括由由未未知知的的或或不不完完全全受受信信任任的的第第三三方方创建的代码)安全执行的代码执行环境。创建的代码)安全执行的代码执行环境
3、。 提提供供一一个个可可消消除除脚脚本本环环境境或或解解释释环环境境的的性性能能问问题题的的代代码码执执行行环境。环境。 品凡苫檬舱厚报押忆唁桶快凤义胶恃绞颅鄙旬呈去再廓伙晰著惹移诅犁搓第9章ET框架及其类库第9章ET框架及其类库9.1 NET框架 1. .NET 框架的目标 使使开开发发人人员员的的经经验验在在面面对对类类型型大大不不相相同同的的应应用用程程序序(如如基基于于 Windows Windows 的应用程序和基于的应用程序和基于 Web Web 的应用程序)时保持一致。的应用程序)时保持一致。 按按照照工工业业标标准准生生成成所所有有通通讯讯,以以确确保保基基于于 .NET .N
4、ET 框框架架的的代代码码可与任何其它代码集成。可与任何其它代码集成。2. .NET2. .NET框架的组成框架的组成 .NET.NET框架是一个可以构造、发布及运行框架是一个可以构造、发布及运行WebWeb服务的开发环境。服务的开发环境。 .NET.NET框架平台包括两个方面:一个是运行时引擎(框架平台包括两个方面:一个是运行时引擎(Runtime Runtime EngineEngine),另一个是基础类库(),另一个是基础类库(Base Class LibraryBase Class Library)。)。 乐庄柱荔荫掇凿决犬咏福撮班恭躇锑哆就里若辰砂柯查疤霉铜桥碌导肆续第9章ET框架及
5、其类库第9章ET框架及其类库9.1 NET框架 2. .NET框架的组成公共语言运行库是.NET 框架的基础。用户可以将运行库看作一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理),而且还强制实施严格的类型安全以及可确保安全性和可靠性的其它形式的代码准确性。 .NET框架的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,可以使用它开发包含从传统的命令行或图形用户界面 (GUI) 应用程序到基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web services)在内的应用程序。 低霉爵藐毗滚葵哭韧糙率郑滁俺司峰免镑异垃帚体
6、赃滋严说徊骡奶杜医扯第9章ET框架及其类库第9章ET框架及其类库9.1 NET框架 邢棱仗享铲淑投慈仔境牲辆咕榔桑哼认郧杭颇梭读配旨界览蒸秋勃萝财筏第9章ET框架及其类库第9章ET框架及其类库9.1 NET框架 3.NET应用程序开发的类型客户端应用程序在基于 Windows 的编程中最接近于传统风格的应用程序。这些是在桌面上显示窗口或窗体从而使用户能够执行任务的应用程序类型。客户端应用程序包括诸如字处理器和电子表格等应用程序以及自定义的业务应用程序(如数据输入工具、报告工具等等)。客户端应用程序通常使用窗口、菜单、按钮和其它 GUI 元素,并且它们可能访问本地资源(如文件系统)和外围设备(如
7、打印机)。服务器应用程序开发在托管领域中,服务器端应用程序是通过运行库宿主实现的。非托管应用程序承载公共语言运行库,后者使用户的自定义托管代码可以控制服务器的行为。此模型在获得主服务器的性能和可伸缩性的同时提供给公共语言运行库和类库的所有功能。ASP.NET 是使开发人员能够使用.NET框架开发基于Web的应用程序的宿主环境。 塔刀间夺坐蔫歇窝将搀萨体渊井痒技双试擎棕清军匡谤晋机窘犁黄蕉荆姚第9章ET框架及其类库第9章ET框架及其类库9.2 .NET应用程序的核心要素1运行时库.NET框架提供了一个运行时环境,这个环境叫做通用语言运行时(Common Language Runtime,简称CL
8、R)。CLR可以管理代码的执行,并提供给开发人员进行开发时所需的服务。开发人员可以利用编译器和开发工具具有的运行时功能来开发托管的应用程序,托管应用程序使用的代码是由专门对CLR提供支持的编译器生成的托管代码。这种托管代码可以在设计和运行时,享受到跨语言集成、跨语言异常处理及统一调试等带来的好处。公共语言运行库具有如下功能:公共语言运行库管理内存、线程执行、代码执行、代码安全验证、编译以及其它系统服务。 枣咆肉甘俞苫爬淤灵料你破学恨隶涂金蛋察秘瓤埠伎矣媚据稼撼翻斡乐纂第9章ET框架及其类库第9章ET框架及其类库9.2 .NET应用程序的核心要素2中间语言从表面上看托管的应用程序和以前的应用程序
9、没有什么不同,当开发人员使用一种开发工具(例如VC+.NET),对符合.NET应用程序要求的源代码进行编译后,就会得到一个PE格式的可执行文件,这个文件里存储的不是我们所熟悉的本机代码,而是称为MSIL的中间语言代码。 在可以执行代码前,必须将MSIL转换为CPU特定的代码,这通常是通过实时 (JIT) 编译器完成的。由于公共语言运行库为它支持的每种计算机结构都提供了一种或多种 JIT 编译器,因此可以在任何受支持的结构上对同一组 MSIL 进行 JIT 编译和执行。实层炼再等霍擎涧睬畜陕张琐翰犁涸壹及谓莫扁养坝兑埠儿庚两秽坝宙纺第9章ET框架及其类库第9章ET框架及其类库9.2 .NET应用
10、程序的核心要素3 JIT编译器在可以执行Microsoft中间语言 (MSIL) 之前,它必须由.NET框架实时 (JIT) 编译器转换为本机代码。本机代码是运行于 JIT 编译器所在的同一计算机结构上的CPU特定的代码。由于公共语言运行库为每种受支持的CPU结构都提供了JIT编译器,开发人员可以编写一组可在不同结构的计算机上进行JIT编译和执行的MSIL。JIT编译考虑了在执行过程中某些代码可能永远不会被调用的事实。它不是花时间和内存将可移植可执行 (PE) 文件中的所有MSIL转换为本机代码,而是在执行期间根据需要转换MSIL并存储结果本机代码供后面的调用使用。 剁盎帘荤凿养泞刊玩诞抢紧隐
11、萤稽到乃喂聂丑智蔽迪虾或系去项拉朗淮蛮第9章ET框架及其类库第9章ET框架及其类库9.2 .NET应用程序的核心要素4程序集一个Visual C+应用程序可以包含一个或多个程序集。程序集是类型和资源的集合,创建类型和资源的目的是为了共同工作和形成一个功能上的逻辑单元。程序集是可以在CLR下被共享和重用的功能单元,是具有可重用、版本化的和自我描述(通过元数据描述)的应用程序模块。它是可版本化的最小的单元。程序集可以分为动态程序集和静态程序集。不论是哪一种程序集,其中都有一个描述程序集中的元素如何相互关联的“额外”数据集合。元数据包含在一个配件清单中(manifest)中。 5应用程序域应用程序域
12、提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的隔离。可以在具有同等隔离级别单个进程中运行几个应用程序域,而不会造成进程间调用或进程间切换等方面的额外开销。在一个进程内运行多个应用程序的能力显著增强了服务器的可伸缩性。 朴哩宫绅筛侗捡兔港先而颂竖遗螺情炸再测北国坡于挠骏灌捆屋腰兰焊俊第9章ET框架及其类库第9章ET框架及其类库9.2 .NET应用程序的核心要素6 .NET框架类库和命名空间.NET 框架类库是一个与公共语言运行库紧密集成的可重用的类型集合。该类库是面向对象的,并提供用户自己的托管代码可从中导出功能的类型。这不但使 .NET 框架类型易于使用,而且还减少了学习
13、 .NET 框架的新功能所需要的时间。此外,第三方组件可与 .NET 框架中的类无缝集成。集合类将与 .NET 框架中的类无缝地混合。正如对面向对象的类库所希望的那样,.NET 框架类型能够完成一系列常见编程任务(包括诸如字符串管理、数据收集、数据库连接以及文件访问等任务)。除这些常见任务之外,类库还包括支持多种专用开发方案的类型。 势沟债佳芹返纠铅辆叭丽爵己惟绘渣浦宋拷嵌豌畴以谎苛寅果晴绷脏看葛第9章ET框架及其类库第9章ET框架及其类库9.2 .NET应用程序的核心要素命名空间用途描述代表类System包含所有的基础类库和被每一个应用程序使用的类库Object,Buffer,Byte,Ch
14、ar,Array,Int32,Exception,GC,String等Systrm.Collections管理对象集合的类库ArryList,BitArray,Dictionary,Hashtable,Stack等System.WinForms包含可以进行图形用户接口开发的类型库Button,CheckBox,DataGrid,FileDialog,Form,ListBox,MainMenu,MonthCalendar,NewFontDialog,RichEdit,ToolBarTreeViewSystem.OI包含可以支持同步、非同步数据流读写的类型库ByteStream,File,File
15、Stream,MemoryStream,Path,StreamReader,StreamWriterSystem.Reflection包含可以从元数据中抽取信息的类型库Assembly,ConstructorInfo,FieldInfo,MemberInfo,MethodInfo,Module,ParameterInfoSystem.Data包含基础数据库管理类型库DataBinding,DataRelation,ataRow,DataSet,ataTable,DataSource檀呻瑟谁涕抒兄拌锥贴欲挖柞粒亏延梅尺韵蛹叔雇或胀疆税幕昼盲锈兽碗第9章ET框架及其类库第9章ET框架及其类库9.3
16、托管C+语言基础1托管类型托管C+语言与传统的C+语言相比,语法上没有多大的变化,但是在数据类型上有了很大的改变,对于托管C+语言我们首先要学习托管数据类型。C+语言可以包含托管类型和非托管类型。托管类型是一种数据类型,该数据类型在托管堆上实例化(一般使用new 操作符),从不会在非托管堆或者栈上创建。托管类型是一种可以被CLR自动垃圾回收的类型,不需要用delete操作符来释放对象,此类对象不能直接删除。非托管类型是一种为垃圾回收器所忽略的数据类型,程序员需要用delete操作符来释放非托管类型的对象所占用的内存。托管C+类型总体上分为值类型和引用类型。值类型又分为内置值类型(如整数类型、浮
17、点类型)、用户定义值类型、枚举类型;引用类型又分为自描述类型、指针类型和接口类型。 站这峰袍火映杉逞告鼎拴板曲左产顶级件堪介焰就艇启狈结砾恶嫉捶挖评第9章ET框架及其类库第9章ET框架及其类库9.3托管C+语言基础2.值类型大多数编程语言提供内置的数据类型(比如整数和浮点数),这些数据类型会在作为参数传递时被复制(即它们通过值来传递)。在 .NET 框架中,这些称为值类型。运行库支持两种值类型:内置值类型和用户定义的值类型。(1)内置值类型 .NET 框架定义了内置值类型(如 System.Int32 和 System.Boolean),它们对应于编程语言使用的基元数据类型并与之相同。表9.
18、2列出了 .NET 框架支持的一些值类型,简要描述了每个类型,并指示C+ 托管扩展中的相应类型。表中还包括 Object 和 String 类的项,这些项在许多语言中都有相应的关键字。 宅棺寐椅酒化透极包烁灌贝豢夫瞬散浊疟闪坐坏歇办岸题酸滞坪常集二媳第9章ET框架及其类库第9章ET框架及其类库9.3托管C+语言基础(2)自定义值类型值类型和垃圾收集类不同,前者可以在运行时堆栈上分配并且在特定条件下可以被当作静态变量或堆分配变量。值类可以在类或结构声明之前添加_value关键字。值类的定义方式如下: _value class_spcifier 或者 _value struct_specifier
19、 例如,下面的代码定义了两个值类: _value class myClassA ;逼典虏藉忌光协呻矮砍寐近荆钎言怜澳嘿表稚橡掩段毛恍绊璃葬舶救然娱第9章ET框架及其类库第9章ET框架及其类库9.3托管C+语言基础3.垃圾回收类垃圾回收类又称为引用类型,前面我们已经提到了“垃圾收集”,对于程序员来讲,垃圾收集类为我们提供了几方面的功能:其一是,在垃圾收集堆上创建对象的速度比传统的Win32堆上快;其二是,在垃圾收集堆上创建的对象可以被系统自动回收,不必对资源进行人工释放。垃圾收集类的定义方法是使用_gc关键字,使用格式如下: _gc class_specifier _gc struct_spec
20、ifier _gc interface_specifier砖耸鹰纬耳累佩恤盘瘟跑贴轮膨掠研枝颧膝狗皖市始独就赢挠姑跨谆孽哇第9章ET框架及其类库第9章ET框架及其类库9.3托管C+语言基础(1)接口类型在托管的C+中,接口类型体现了托管的优点,定义托管的关键字为_interface,如果定义一个托管的C+接口,在_interface前面还需加上_gc关键字。下面是定义一个托管接口的代码: /定义一个托管的C+类接口 _gc_interface Imyinterface void Method1(); ;傣释存澄挂氢殖喊莱凝舍浊懈衰铲宛长胯舍观壳札赵坎妙咏胯浊缘蜀播兰第9章ET框架及其类库第9章
21、ET框架及其类库9.3托管C+语言基础(2)指针类型指针是特殊类型的变量。运行库支持三种指针:托管指针、非托管指针和非托管函数指针。托管指针(也称为 _gc 指针)是托管应用程序使用的一种新型指针。托管指针指向公共语言运行库堆的托管内存块。此堆上执行自动垃圾回收。托管指针是为通过引用传递的方法参数而产生的。某些语言提供了产生托管指针的其它方式。只有托管指针才符合 CLS。不需要显式定义指针类型。在声明指针时,就确定了指针类型所需的所有信息。当指针类型为引用类型时,指针类型的值不是对象,而且无法从这样的值确定准确的类型。 乡腮醒腻拄确晓煤蚁品采驴产讶蹦评棕凡账钧集叫舵树湍滓貌孤患芋霜素第9章ET
22、框架及其类库第9章ET框架及其类库9.3托管C+语言基础(3)数组类型数组类型是通过指定数组的元素类型、数组的秩(维数)和数组每个维度的上限和下限来定义的。尽管它们可能是在动态(而非静态)提供时标记的,但所有这些都包含在数组类型的任何签名中。精确的数组类型是在需要时由运行库自动创建的,不需要单独定义数组类型。给定类型的数组只能保存该类型的元素。数组类型的值是对象。数组对象定义为存储数组元素类型的值的一系列位置。重复值的数量由数组的秩和边界来确定。数组类型从类型 System.Array 继承而来。此类表示所有的数组,不论它们的元素类型或它们的秩如何。对数组定义的操作有:根据大小和下限信息分配数
23、组;编制数组索引以读取或写入值;计算数组元素的地址(托管指针);以及查询秩、边界和数组中存储的值的总数。己喊薪角促挣雏毒祸宿俊鸯匡暂葡怀络肤孟慈弊馏豪嚎粗氰坤方浪宵裤衍第9章ET框架及其类库第9章ET框架及其类库9.3托管C+语言基础4.封箱与拆箱在编写程序时应该尽量减少使用引用类型,多使用值类型。但是,为了实现跨语言的操作,需要将值类型转换成引用类型,而在本地应用时为了节省资源,又需要作相反的工作。由值类型到引用类型的转换就是封箱,由引用类型到值类型的转换就是拆箱。对一个对象或者结构进行封箱要使用_box关键字。如果想让对象或结构成为托管的封箱形式对象,只要使用_box关键字就行了,下面的代
24、码将objValueClassName转变成封箱形式变量:_box(objValueClassName)兼亮位徐虾软泣钮谱宁匝先启陇坍崩挽蒲喻骑完之僚退枣理佛天郑象嘘侈第9章ET框架及其类库第9章ET框架及其类库9.3托管C+语言基础5 委托运行库支持称为委托的引用类型,其作用类似于 C+ 中函数指针的用途。与函数指针不同,委托实例独立于它所封装的方法的类,它与函数不同的是增加了安全机制,在调用这样的类型变量时,并不单纯依赖于地址,还必须带有函数的参数个数、参数类型以及返回值个数和类型的详细信息描述;最主要的是那些方法与委托的类型是兼容的。另外,函数指针只能引用静态函数,而委托可以引用静态和实
25、例方法。委托主要用于 .NET 框架中的事件处理程序和回调函数。在托管C+扩展中,委托类型由关键字_delegate来实现。所有委托都是从 System.Delegate 继承而来的,并且有一个调用列表,这是在调用委托时所执行的方法的一个链接列表。产生的委托可以用匹配的签名引用任何方法。没有为具有返回类型并在调用列表中包含多个方法的委托定义返回值。够查坤递贬涵跑装盯迭痛鄂崇乞掂胞司援见彬氰舷亲嚎臂屉诗裕当肃没穆第9章ET框架及其类库第9章ET框架及其类库9.3托管C+语言基础6 异常处理在程序的运行过程中经常会出现一些异常的情况,例如用户输入非法值或软驱没有放入软盘等非法操作。.NET平台(即
26、CLR)支持异常处理,.NET框架的总的异常类是System.Exception,其中有许多处理异常类的方法,开发人员可以从这个总异常类来派生自己的异常类,来处理应用程序中特殊问题。下面是在托管C+代码中处理异常的代码:始练宛页赘奎赁夹枚蜒斩甲框碍宦烤谷呀耽浅我信贴峭颖犯痢朗醉羊彦咱第9章ET框架及其类库第9章ET框架及其类库9.3托管C+语言基础try /可能会出现异常的代码 catch (异常类) /出现对应异常类可以处理的异常时执行下面代码 /否则跳过此块_finally /如果都不可处理或全部处理完毕,则做清理工作 莹汀瑶就绍紊厉宜涸邯翻曳芭交蜂荆炔妮肛婶秀褥过宝捌腔庙羚肝笆狮击第9章
27、ET框架及其类库第9章ET框架及其类库9.4第一个托管C+应用程序 前面我们介绍了.NET框架和托管的C+语言基础等内容,下面通过一个简单的托管C+应用程序实例,介绍托管的C+应用程序创建过程和应用程序的基本构成。【例9.1】创建一个托管的C+应用程序,程序用来判断用户输入的整数是否为偶数,如果是偶数则输出“此数是偶数!”,否则抛出异常。托管的C+应用程序不像MFC应用程序那样,由应用程序向导创建很多文件和代码,而是由程序员自己编写代码,不过托管的C+应用程序不像MFC应用程序那样复杂,代码很容易理解。下面是创建应用程序的步骤和代码:曙仪知丹颗根桃把开禹任膳蔡税鲍岸钉絮樊赠唇唬痰甸岗演丸滩肺窖
28、傈坠第9章ET框架及其类库第9章ET框架及其类库9.4第一个托管C+应用程序喂都坍锣奏症银肺贱怠柠币液驰鳖屑鳞芥慑淖浮烁恼堪蓄业谊熟杠浪拆莎第9章ET框架及其类库第9章ET框架及其类库9.4第一个托管C+应用程序1.创建项目在集成开发环境的“文件”菜单下,选择“新建”,然后在选择“项目”,在弹出的对话框中选择“托管的C+应用程序”模板,将项目命令为“mych9_1”,如图9. 3所示,然后单击“确定”按钮。应用程序向导就会生成一个托管的C+项目。2.输入代码创建了项目之后,我们会见到“mych9_1”项目有三个文件夹,它们是源文件、头文件、资源文件等文件夹。在文件AssemblyInfo.cpp,输入程序内容。 脏歉撬阎琳闲红熬姻卸渍赁衷拧鸡哪居筋篆敲坠谓鞍徘全钳鼻肪锅护诊浩第9章ET框架及其类库第9章ET框架及其类库9.5专题讨论与作业设计9.5.1专题讨论(1)什么是运行时库?(2)什么是中间语言?(3)什么是委托?(4)如何处理异常?9.5.2作业设计编写一个求平方根的托管应用程序。君厢太挤幅叹粉蜀谨质耗那价蹄衅怒迹叔潦豹毁玛鼻爸邢废霸褒妹惊口岭第9章ET框架及其类库第9章ET框架及其类库