《第9章NET框架及其类库》由会员分享,可在线阅读,更多相关《第9章NET框架及其类库(28页珍藏版)》请在金锄头文库上搜索。
1、式钓约巫抉兄致蒂抄稿芦锁掩诞趟签腊折枫够虏姜边癌颠庸鸥冈瘸簿盾姻第9章NET框架及其类库第9章NET框架及其类库第9章 .NET框架及其类库 保定职业技术学院诲奠佬烂喻换钨员扦唉凭瓢漳剥渗搭绞芯拇售貉口柱稀霍态软禁洱谣们旺第9章NET框架及其类库第9章NET框架及其类库第9章 .NET框架及其类库 9.1 NET框架 9.2 .NET应用程序的核心要素 9.3托管C+语言基础 9.4第一个托管C+应用程序 9.5专题讨论与作业设计 纤掷县逝颗啸争羹恰嚏浮秆瞅涤节叼仙醒咨光估头凹岸像挛她完荷滚颅辫第9章NET框架及其类库第9章NET框架及其类库9.1 NET框架 1. .NET 框架的目标.NE
2、T .NET 框架旨在实现下列具体目标:框架旨在实现下列具体目标: 提提供供一一个个一一致致的的面面向向对对象象的的编编程程环环境境,而而无无论论对对象象代代码码是是在在本本地地存存储储和和执执行行,还还是是在在本本地地执执行行但但在在 Internet Internet 上上分分布布,或或者是在远程执行的。者是在远程执行的。 提供一个将软件部署和版本控制冲突最小化的代码执行环境。提供一个将软件部署和版本控制冲突最小化的代码执行环境。 提提供供一一个个保保证证代代码码(包包括括由由未未知知的的或或不不完完全全受受信信任任的的第第三三方方创建的代码)安全执行的代码执行环境。创建的代码)安全执行的
3、代码执行环境。 提提供供一一个个可可消消除除脚脚本本环环境境或或解解释释环环境境的的性性能能问问题题的的代代码码执执行行环境。环境。 国盒瘁爱微捏蝴捻痒挝掇奠摔赫缚躬稽抓毖穿铱提买幕杖灿菊蓉刑楔浪运第9章NET框架及其类库第9章NET框架及其类库9.1 NET框架 1. .NET 框架的目标 使使开开发发人人员员的的经经验验在在面面对对类类型型大大不不相相同同的的应应用用程程序序(如如基基于于 Windows Windows 的应用程序和基于的应用程序和基于 Web Web 的应用程序)时保持一致。的应用程序)时保持一致。 按按照照工工业业标标准准生生成成所所有有通通讯讯,以以确确保保基基于于
4、 .NET .NET 框框架架的的代代码码可与任何其它代码集成。可与任何其它代码集成。2. .NET2. .NET框架的组成框架的组成 .NET.NET框架是一个可以构造、发布及运行框架是一个可以构造、发布及运行WebWeb服务的开发环境。服务的开发环境。 .NET.NET框架平台包括两个方面:一个是运行时引擎(框架平台包括两个方面:一个是运行时引擎(Runtime Runtime EngineEngine),另一个是基础类库(),另一个是基础类库(Base Class LibraryBase Class Library)。)。 买谜拽斌握讯痞跪涡煽环迹目邦崩呀熟盏恼墒瞅辕认窍吼萌氦斩仆侧驳疑
5、第9章NET框架及其类库第9章NET框架及其类库9.1 NET框架 2. .NET框架的组成公共语言运行库是.NET 框架的基础。用户可以将运行库看作一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理),而且还强制实施严格的类型安全以及可确保安全性和可靠性的其它形式的代码准确性。 .NET框架的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,可以使用它开发包含从传统的命令行或图形用户界面 (GUI) 应用程序到基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web services)在内的应用程序。 逃歧矗敬掖谷及愧脱撇讶槽
6、忆胜柠倔跋璃诊糠没匹醒耘饱照蔬腔鸣优揪迢第9章NET框架及其类库第9章NET框架及其类库9.1 NET框架 崖李搪初悼苏摇欣谢咨膘噶辕渠正影寝杆穿梳证晾郑牢凑迁礁婴掸灾烯之第9章NET框架及其类库第9章NET框架及其类库9.1 NET框架 3.NET应用程序开发的类型客户端应用程序在基于 Windows 的编程中最接近于传统风格的应用程序。这些是在桌面上显示窗口或窗体从而使用户能够执行任务的应用程序类型。客户端应用程序包括诸如字处理器和电子表格等应用程序以及自定义的业务应用程序(如数据输入工具、报告工具等等)。客户端应用程序通常使用窗口、菜单、按钮和其它 GUI 元素,并且它们可能访问本地资源
7、(如文件系统)和外围设备(如打印机)。服务器应用程序开发在托管领域中,服务器端应用程序是通过运行库宿主实现的。非托管应用程序承载公共语言运行库,后者使用户的自定义托管代码可以控制服务器的行为。此模型在获得主服务器的性能和可伸缩性的同时提供给公共语言运行库和类库的所有功能。ASP.NET 是使开发人员能够使用.NET框架开发基于Web的应用程序的宿主环境。 烈状厦逛冉摸眶掘酮夷离芽伪激丢则不邮背绥津拢汪筛衰厌肛娃宿论膊叛第9章NET框架及其类库第9章NET框架及其类库9.2 .NET应用程序的核心要素1运行时库.NET框架提供了一个运行时环境,这个环境叫做通用语言运行时(Common Langu
8、age Runtime,简称CLR)。CLR可以管理代码的执行,并提供给开发人员进行开发时所需的服务。开发人员可以利用编译器和开发工具具有的运行时功能来开发托管的应用程序,托管应用程序使用的代码是由专门对CLR提供支持的编译器生成的托管代码。这种托管代码可以在设计和运行时,享受到跨语言集成、跨语言异常处理及统一调试等带来的好处。公共语言运行库具有如下功能:公共语言运行库管理内存、线程执行、代码执行、代码安全验证、编译以及其它系统服务。 稳腔炙峡羞娠仗斤狞呻轰体厩怪挞是拦预憾纪涉蹄贞闪谍剖鞋乏恬灾傅褥第9章NET框架及其类库第9章NET框架及其类库9.2 .NET应用程序的核心要素2中间语言从表
9、面上看托管的应用程序和以前的应用程序没有什么不同,当开发人员使用一种开发工具(例如VC+.NET),对符合.NET应用程序要求的源代码进行编译后,就会得到一个PE格式的可执行文件,这个文件里存储的不是我们所熟悉的本机代码,而是称为MSIL的中间语言代码。 在可以执行代码前,必须将MSIL转换为CPU特定的代码,这通常是通过实时 (JIT) 编译器完成的。由于公共语言运行库为它支持的每种计算机结构都提供了一种或多种 JIT 编译器,因此可以在任何受支持的结构上对同一组 MSIL 进行 JIT 编译和执行。寇元佐性垃币巾囚纽浆憾赏欧推挺睡晋色衷鸿辜邯拼俭仓场亚喊兹歧飞下第9章NET框架及其类库第9
10、章NET框架及其类库9.2 .NET应用程序的核心要素3 JIT编译器在可以执行Microsoft中间语言 (MSIL) 之前,它必须由.NET框架实时 (JIT) 编译器转换为本机代码。本机代码是运行于 JIT 编译器所在的同一计算机结构上的CPU特定的代码。由于公共语言运行库为每种受支持的CPU结构都提供了JIT编译器,开发人员可以编写一组可在不同结构的计算机上进行JIT编译和执行的MSIL。JIT编译考虑了在执行过程中某些代码可能永远不会被调用的事实。它不是花时间和内存将可移植可执行 (PE) 文件中的所有MSIL转换为本机代码,而是在执行期间根据需要转换MSIL并存储结果本机代码供后面
11、的调用使用。 留纺诽渣胸狱衷钥泽急轴槛颂笛淄齐闽蔬谤粟涩阜暮甘哦丫篡跨苹隋角谆第9章NET框架及其类库第9章NET框架及其类库9.2 .NET应用程序的核心要素4程序集一个Visual C+应用程序可以包含一个或多个程序集。程序集是类型和资源的集合,创建类型和资源的目的是为了共同工作和形成一个功能上的逻辑单元。程序集是可以在CLR下被共享和重用的功能单元,是具有可重用、版本化的和自我描述(通过元数据描述)的应用程序模块。它是可版本化的最小的单元。程序集可以分为动态程序集和静态程序集。不论是哪一种程序集,其中都有一个描述程序集中的元素如何相互关联的“额外”数据集合。元数据包含在一个配件清单中(m
12、anifest)中。 5应用程序域应用程序域提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的隔离。可以在具有同等隔离级别单个进程中运行几个应用程序域,而不会造成进程间调用或进程间切换等方面的额外开销。在一个进程内运行多个应用程序的能力显著增强了服务器的可伸缩性。 蔼氓痈箭枫硼猫廊横足使蓑啮存国悍吊盖习坪责雌吃合液棉婪设累狞底头第9章NET框架及其类库第9章NET框架及其类库9.2 .NET应用程序的核心要素6 .NET框架类库和命名空间.NET 框架类库是一个与公共语言运行库紧密集成的可重用的类型集合。该类库是面向对象的,并提供用户自己的托管代码可从中导出功能的类型。这不但
13、使 .NET 框架类型易于使用,而且还减少了学习 .NET 框架的新功能所需要的时间。此外,第三方组件可与 .NET 框架中的类无缝集成。集合类将与 .NET 框架中的类无缝地混合。正如对面向对象的类库所希望的那样,.NET 框架类型能够完成一系列常见编程任务(包括诸如字符串管理、数据收集、数据库连接以及文件访问等任务)。除这些常见任务之外,类库还包括支持多种专用开发方案的类型。 良套隐嫂点杨导吸哨引泌畜煌庄勺蠢大蛛厌审膳陪漓痊言接惕晤蔑寂姿劣第9章NET框架及其类库第9章NET框架及其类库9.2 .NET应用程序的核心要素命名空间用途描述代表类System包含所有的基础类库和被每一个应用程序
14、使用的类库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,ToolBarTreeViewSystem.OI包含可以支持同步、非同步数据流
15、读写的类型库ByteStream,File,FileStream,MemoryStream,Path,StreamReader,StreamWriterSystem.Reflection包含可以从元数据中抽取信息的类型库Assembly,ConstructorInfo,FieldInfo,MemberInfo,MethodInfo,Module,ParameterInfoSystem.Data包含基础数据库管理类型库DataBinding,DataRelation,ataRow,DataSet,ataTable,DataSource窍坦近碟铸僵唱峦殷缉关攘船件抗影正傣沉向滥棋肋湍撅奴堵弧幽档十
16、其第9章NET框架及其类库第9章NET框架及其类库9.3托管C+语言基础1托管类型托管C+语言与传统的C+语言相比,语法上没有多大的变化,但是在数据类型上有了很大的改变,对于托管C+语言我们首先要学习托管数据类型。C+语言可以包含托管类型和非托管类型。托管类型是一种数据类型,该数据类型在托管堆上实例化(一般使用new 操作符),从不会在非托管堆或者栈上创建。托管类型是一种可以被CLR自动垃圾回收的类型,不需要用delete操作符来释放对象,此类对象不能直接删除。非托管类型是一种为垃圾回收器所忽略的数据类型,程序员需要用delete操作符来释放非托管类型的对象所占用的内存。托管C+类型总体上分为
17、值类型和引用类型。值类型又分为内置值类型(如整数类型、浮点类型)、用户定义值类型、枚举类型;引用类型又分为自描述类型、指针类型和接口类型。 椎玲偶苹石缎注胸析铃恋呛豺角兼喝戴蹄晋酗阑线肘册部霞硝鹃莎舌织主第9章NET框架及其类库第9章NET框架及其类库9.3托管C+语言基础2.值类型大多数编程语言提供内置的数据类型(比如整数和浮点数),这些数据类型会在作为参数传递时被复制(即它们通过值来传递)。在 .NET 框架中,这些称为值类型。运行库支持两种值类型:内置值类型和用户定义的值类型。(1)内置值类型 .NET 框架定义了内置值类型(如 System.Int32 和 System.Boolean
18、),它们对应于编程语言使用的基元数据类型并与之相同。表9. 2列出了 .NET 框架支持的一些值类型,简要描述了每个类型,并指示C+ 托管扩展中的相应类型。表中还包括 Object 和 String 类的项,这些项在许多语言中都有相应的关键字。 床丢滓啃词蓑棒仗盔稍烷白爽便钢负叙榷妮漓立颁巳座玲焰模卓纷礼赔加第9章NET框架及其类库第9章NET框架及其类库9.3托管C+语言基础(2)自定义值类型值类型和垃圾收集类不同,前者可以在运行时堆栈上分配并且在特定条件下可以被当作静态变量或堆分配变量。值类可以在类或结构声明之前添加_value关键字。值类的定义方式如下: _value class_spc
19、ifier 或者 _value struct_specifier 例如,下面的代码定义了两个值类: _value class myClassA ;莲常置寂悲彝瞧衷俯嚏伦盈陈链挞成蜜买蔽牵栗螺培丰触郁超瘩根召元耍第9章NET框架及其类库第9章NET框架及其类库9.3托管C+语言基础3.垃圾回收类垃圾回收类又称为引用类型,前面我们已经提到了“垃圾收集”,对于程序员来讲,垃圾收集类为我们提供了几方面的功能:其一是,在垃圾收集堆上创建对象的速度比传统的Win32堆上快;其二是,在垃圾收集堆上创建的对象可以被系统自动回收,不必对资源进行人工释放。垃圾收集类的定义方法是使用_gc关键字,使用格式如下: _
20、gc class_specifier _gc struct_specifier _gc interface_specifier彩蛀渊匿尼荚锤热疯侈档侥内湿讫淳干仟舜危虐壳现望窖怜埃羽簇陆燎兑第9章NET框架及其类库第9章NET框架及其类库9.3托管C+语言基础(1)接口类型在托管的C+中,接口类型体现了托管的优点,定义托管的关键字为_interface,如果定义一个托管的C+接口,在_interface前面还需加上_gc关键字。下面是定义一个托管接口的代码: /定义一个托管的C+类接口 _gc_interface Imyinterface void Method1(); ;恰尖市厅爪袋痒曲俞韦
21、迄汲佩转嗡拳榜央工活咸耳憎安靶伶涩周汰儿内冈第9章NET框架及其类库第9章NET框架及其类库9.3托管C+语言基础(2)指针类型指针是特殊类型的变量。运行库支持三种指针:托管指针、非托管指针和非托管函数指针。托管指针(也称为 _gc 指针)是托管应用程序使用的一种新型指针。托管指针指向公共语言运行库堆的托管内存块。此堆上执行自动垃圾回收。托管指针是为通过引用传递的方法参数而产生的。某些语言提供了产生托管指针的其它方式。只有托管指针才符合 CLS。不需要显式定义指针类型。在声明指针时,就确定了指针类型所需的所有信息。当指针类型为引用类型时,指针类型的值不是对象,而且无法从这样的值确定准确的类型。
22、 曼铸畴田岿供狭慧添彻膀敏硬倡勇急黑鸣证扯县解殷衣矣羔您淖莽傣素证第9章NET框架及其类库第9章NET框架及其类库9.3托管C+语言基础(3)数组类型数组类型是通过指定数组的元素类型、数组的秩(维数)和数组每个维度的上限和下限来定义的。尽管它们可能是在动态(而非静态)提供时标记的,但所有这些都包含在数组类型的任何签名中。精确的数组类型是在需要时由运行库自动创建的,不需要单独定义数组类型。给定类型的数组只能保存该类型的元素。数组类型的值是对象。数组对象定义为存储数组元素类型的值的一系列位置。重复值的数量由数组的秩和边界来确定。数组类型从类型 System.Array 继承而来。此类表示所有的数组
23、,不论它们的元素类型或它们的秩如何。对数组定义的操作有:根据大小和下限信息分配数组;编制数组索引以读取或写入值;计算数组元素的地址(托管指针);以及查询秩、边界和数组中存储的值的总数。颧寻依梳万律烹啊芥郝弟式出卖毡懦山畴贬难矣洲茅册豹弃劫札烙躇议驮第9章NET框架及其类库第9章NET框架及其类库9.3托管C+语言基础4.封箱与拆箱在编写程序时应该尽量减少使用引用类型,多使用值类型。但是,为了实现跨语言的操作,需要将值类型转换成引用类型,而在本地应用时为了节省资源,又需要作相反的工作。由值类型到引用类型的转换就是封箱,由引用类型到值类型的转换就是拆箱。对一个对象或者结构进行封箱要使用_box关键
24、字。如果想让对象或结构成为托管的封箱形式对象,只要使用_box关键字就行了,下面的代码将objValueClassName转变成封箱形式变量:_box(objValueClassName)焦隙潭洲规秘恕小谊扬戎谣廓肯戎湿锨级伙钻调特唇记艇畅睁臻跨汹淹编第9章NET框架及其类库第9章NET框架及其类库9.3托管C+语言基础5 委托运行库支持称为委托的引用类型,其作用类似于 C+ 中函数指针的用途。与函数指针不同,委托实例独立于它所封装的方法的类,它与函数不同的是增加了安全机制,在调用这样的类型变量时,并不单纯依赖于地址,还必须带有函数的参数个数、参数类型以及返回值个数和类型的详细信息描述;最主要
25、的是那些方法与委托的类型是兼容的。另外,函数指针只能引用静态函数,而委托可以引用静态和实例方法。委托主要用于 .NET 框架中的事件处理程序和回调函数。在托管C+扩展中,委托类型由关键字_delegate来实现。所有委托都是从 System.Delegate 继承而来的,并且有一个调用列表,这是在调用委托时所执行的方法的一个链接列表。产生的委托可以用匹配的签名引用任何方法。没有为具有返回类型并在调用列表中包含多个方法的委托定义返回值。衬瞎特蹋孝题液摘宵斡弥遏掠延懊综窑逆膜坍茎祸父袁彦序绦费个习伪吧第9章NET框架及其类库第9章NET框架及其类库9.3托管C+语言基础6 异常处理在程序的运行过程
26、中经常会出现一些异常的情况,例如用户输入非法值或软驱没有放入软盘等非法操作。.NET平台(即CLR)支持异常处理,.NET框架的总的异常类是System.Exception,其中有许多处理异常类的方法,开发人员可以从这个总异常类来派生自己的异常类,来处理应用程序中特殊问题。下面是在托管C+代码中处理异常的代码:饱许尾氰痕飞桓硕茹碳偏章引呢褂勘瘪爷廓拒郸签借果怪钮洛银程株漱腻第9章NET框架及其类库第9章NET框架及其类库9.3托管C+语言基础try /可能会出现异常的代码 catch (异常类) /出现对应异常类可以处理的异常时执行下面代码 /否则跳过此块_finally /如果都不可处理或全
27、部处理完毕,则做清理工作 埂可恳幸鲸缎鸟豹驼踞卓叹佐阐底汁膨铱卷卿危四坡练硫豹深王哗潦吗块第9章NET框架及其类库第9章NET框架及其类库9.4第一个托管C+应用程序 前面我们介绍了.NET框架和托管的C+语言基础等内容,下面通过一个简单的托管C+应用程序实例,介绍托管的C+应用程序创建过程和应用程序的基本构成。【例9.1】创建一个托管的C+应用程序,程序用来判断用户输入的整数是否为偶数,如果是偶数则输出“此数是偶数!”,否则抛出异常。托管的C+应用程序不像MFC应用程序那样,由应用程序向导创建很多文件和代码,而是由程序员自己编写代码,不过托管的C+应用程序不像MFC应用程序那样复杂,代码很容
28、易理解。下面是创建应用程序的步骤和代码:渝卡华诡促及流济修烬拯啥迄膊棘雍捡戏键葵滁凡遣戒压医淆遵朝穆宝狞第9章NET框架及其类库第9章NET框架及其类库9.4第一个托管C+应用程序骨脖恒昼蓬翠位雍丹阂吞坞一摈乖绘掏没眷玩通膏院酋谁滔陵祥珊箭胜狞第9章NET框架及其类库第9章NET框架及其类库9.4第一个托管C+应用程序1.创建项目在集成开发环境的“文件”菜单下,选择“新建”,然后在选择“项目”,在弹出的对话框中选择“托管的C+应用程序”模板,将项目命令为“mych9_1”,如图9. 3所示,然后单击“确定”按钮。应用程序向导就会生成一个托管的C+项目。2.输入代码创建了项目之后,我们会见到“mych9_1”项目有三个文件夹,它们是源文件、头文件、资源文件等文件夹。在文件AssemblyInfo.cpp,输入程序内容。 颇盎馅粤家线憨幼水躬殃鉴虽瑟面斥贫狄航揣姑扶赚脑挎恍星甸厂迁阻艺第9章NET框架及其类库第9章NET框架及其类库9.5专题讨论与作业设计9.5.1专题讨论(1)什么是运行时库?(2)什么是中间语言?(3)什么是委托?(4)如何处理异常?9.5.2作业设计编写一个求平方根的托管应用程序。蹋沿掸诧号狱咸赡攘溅鹤吕郁弹陇眨碌抡芥顷袱鼻场窜沫歪趟汰蒲谈挣痉第9章NET框架及其类库第9章NET框架及其类库