第9章框架及其类库.ppt

上传人:花仙子 文档编号:374658 上传时间:2018-10-06 格式:PPT 页数:28 大小:175KB
下载 相关 举报
第9章框架及其类库.ppt_第1页
第1页 / 共28页
第9章框架及其类库.ppt_第2页
第2页 / 共28页
第9章框架及其类库.ppt_第3页
第3页 / 共28页
第9章框架及其类库.ppt_第4页
第4页 / 共28页
第9章框架及其类库.ppt_第5页
第5页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第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 上分布,或者是在远程执行的。 提供一个将软件部署和版本控制冲突最小化的代码执行环境。 提供一个保证代码(包括由未知的或不完全受信任的第三方创建的代码)安全执行的代码执行环境。 提供一个可消除脚本

2、环境或解释环境的性能问题的代码执行环境。,9.1 NET框架,1. .NET 框架的目标 使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致。 按照工业标准生成所有通讯,以确保基于 .NET 框架的代码可与任何其它代码集成。 2. .NET框架的组成 .NET框架是一个可以构造、发布及运行Web服务的开发环境。 .NET框架平台包括两个方面:一个是运行时引擎(Runtime Engine),另一个是基础类库(Base Class Library)。,9.1 NET框架,2. .NET框架的组成 公共语言运行库是.NET 框架的

3、基础。用户可以将运行库看作一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理),而且还强制实施严格的类型安全以及可确保安全性和可靠性的其它形式的代码准确性。 .NET框架的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,可以使用它开发包含从传统的命令行或图形用户界面 (GUI) 应用程序到基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web services)在内的应用程序。,9.1 NET框架,9.1 NET框架,3NET应用程序开发的类型 客户端应用程序在基于 Windows 的编程中最接近于传统风格的应用程序。这些是

4、在桌面上显示窗口或窗体从而使用户能够执行任务的应用程序类型。客户端应用程序包括诸如字处理器和电子表格等应用程序以及自定义的业务应用程序(如数据输入工具、报告工具等等)。客户端应用程序通常使用窗口、菜单、按钮和其它 GUI 元素,并且它们可能访问本地资源(如文件系统)和外围设备(如打印机)。 服务器应用程序开发在托管领域中,服务器端应用程序是通过运行库宿主实现的。非托管应用程序承载公共语言运行库,后者使用户的自定义托管代码可以控制服务器的行为。此模型在获得主服务器的性能和可伸缩性的同时提供给公共语言运行库和类库的所有功能。 ASP.NET 是使开发人员能够使用.NET框架开发基于Web的应用程序

5、的宿主环境。,9.2 .NET应用程序的核心要素,1运行时库 .NET框架提供了一个运行时环境,这个环境叫做通用语言运行时(Common Language Runtime,简称CLR)。CLR可以管理代码的执行,并提供给开发人员进行开发时所需的服务。开发人员可以利用编译器和开发工具具有的运行时功能来开发托管的应用程序,托管应用程序使用的代码是由专门对CLR提供支持的编译器生成的托管代码。这种托管代码可以在设计和运行时,享受到跨语言集成、跨语言异常处理及统一调试等带来的好处。 公共语言运行库具有如下功能:公共语言运行库管理内存、线程执行、代码执行、代码安全验证、编译以及其它系统服务。,9.2 .

6、NET应用程序的核心要素,2中间语言 从表面上看托管的应用程序和以前的应用程序没有什么不同,当开发人员使用一种开发工具(例如VC+.NET),对符合.NET应用程序要求的源代码进行编译后,就会得到一个PE格式的可执行文件,这个文件里存储的不是我们所熟悉的本机代码,而是称为MSIL的中间语言代码。 在可以执行代码前,必须将MSIL转换为CPU特定的代码,这通常是通过实时 (JIT) 编译器完成的。由于公共语言运行库为它支持的每种计算机结构都提供了一种或多种 JIT 编译器,因此可以在任何受支持的结构上对同一组 MSIL 进行 JIT 编译和执行。,9.2 .NET应用程序的核心要素,3 JIT编

7、译器 在可以执行Microsoft中间语言 (MSIL) 之前,它必须由.NET框架实时 (JIT) 编译器转换为本机代码。本机代码是运行于 JIT 编译器所在的同一计算机结构上的CPU特定的代码。由于公共语言运行库为每种受支持的CPU结构都提供了JIT编译器,开发人员可以编写一组可在不同结构的计算机上进行JIT编译和执行的MSIL。 JIT编译考虑了在执行过程中某些代码可能永远不会被调用的事实。它不是花时间和内存将可移植可执行 (PE) 文件中的所有MSIL转换为本机代码,而是在执行期间根据需要转换MSIL并存储结果本机代码供后面的调用使用。,9.2 .NET应用程序的核心要素,4程序集 一

8、个Visual C+应用程序可以包含一个或多个程序集。程序集是类型和资源的集合,创建类型和资源的目的是为了共同工作和形成一个功能上的逻辑单元。程序集是可以在CLR下被共享和重用的功能单元,是具有可重用、版本化的和自我描述(通过元数据描述)的应用程序模块。它是可版本化的最小的单元。程序集可以分为动态程序集和静态程序集。不论是哪一种程序集,其中都有一个描述程序集中的元素如何相互关联的“额外”数据集合。元数据包含在一个配件清单中(manifest)中。 5应用程序域 应用程序域提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的隔离。可以在具有同等隔离级别单个进程中运行几个应用程序域

9、,而不会造成进程间调用或进程间切换等方面的额外开销。在一个进程内运行多个应用程序的能力显著增强了服务器的可伸缩性。,9.2 .NET应用程序的核心要素,6 .NET框架类库和命名空间 .NET 框架类库是一个与公共语言运行库紧密集成的可重用的类型集合。该类库是面向对象的,并提供用户自己的托管代码可从中导出功能的类型。这不但使 .NET 框架类型易于使用,而且还减少了学习 .NET 框架的新功能所需要的时间。此外,第三方组件可与 .NET 框架中的类无缝集成。 集合类将与 .NET 框架中的类无缝地混合。正如对面向对象的类库所希望的那样,.NET 框架类型能够完成一系列常见编程任务(包括诸如字符

10、串管理、数据收集、数据库连接以及文件访问等任务)。除这些常见任务之外,类库还包括支持多种专用开发方案的类型。,9.2 .NET应用程序的核心要素,9.3托管C+语言基础,1托管类型 托管C+语言与传统的C+语言相比,语法上没有多大的变化,但是在数据类型上有了很大的改变,对于托管C+语言我们首先要学习托管数据类型。C+语言可以包含托管类型和非托管类型。托管类型是一种数据类型,该数据类型在托管堆上实例化(一般使用new 操作符),从不会在非托管堆或者栈上创建。托管类型是一种可以被CLR自动垃圾回收的类型,不需要用delete操作符来释放对象,此类对象不能直接删除。非托管类型是一种为垃圾回收器所忽略

11、的数据类型,程序员需要用delete操作符来释放非托管类型的对象所占用的内存。 托管C+类型总体上分为值类型和引用类型。值类型又分为内置值类型(如整数类型、浮点类型)、用户定义值类型、枚举类型;引用类型又分为自描述类型、指针类型和接口类型。,9.3托管C+语言基础,2.值类型 大多数编程语言提供内置的数据类型(比如整数和浮点数),这些数据类型会在作为参数传递时被复制(即它们通过值来传递)。在 .NET 框架中,这些称为值类型。运行库支持两种值类型:内置值类型和用户定义的值类型。 (1)内置值类型 .NET 框架定义了内置值类型(如 System.Int32 和 System.Boolean),

12、它们对应于编程语言使用的基元数据类型并与之相同。表9. 2列出了 .NET 框架支持的一些值类型,简要描述了每个类型,并指示C+ 托管扩展中的相应类型。表中还包括 Object 和 String 类的项,这些项在许多语言中都有相应的关键字。,9.3托管C+语言基础,(2)自定义值类型 值类型和垃圾收集类不同,前者可以在运行时堆栈上分配并且在特定条件下可以被当作静态变量或堆分配变量。值类可以在类或结构声明之前添加_value关键字。值类的定义方式如下:_value class_spcifier 或者_value struct_specifier 例如,下面的代码定义了两个值类:_value cl

13、ass myClassA;,9.3托管C+语言基础,3.垃圾回收类 垃圾回收类又称为引用类型,前面我们已经提到了“垃圾收集”,对于程序员来讲,垃圾收集类为我们提供了几方面的功能:其一是,在垃圾收集堆上创建对象的速度比传统的Win32堆上快;其二是,在垃圾收集堆上创建的对象可以被系统自动回收,不必对资源进行人工释放。垃圾收集类的定义方法是使用_gc关键字,使用格式如下:_gc class_specifier_gc struct_specifier_gc interface_specifier,9.3托管C+语言基础,(1)接口类型 在托管的C+中,接口类型体现了托管的优点,定义托管的关键字为_i

14、nterface,如果定义一个托管的C+接口,在_interface前面还需加上_gc关键字。下面是定义一个托管接口的代码:/定义一个托管的C+类接口_gc_interface Imyinterfacevoid Method1();,9.3托管C+语言基础,(2)指针类型 指针是特殊类型的变量。运行库支持三种指针:托管指针、非托管指针和非托管函数指针。 托管指针(也称为 _gc 指针)是托管应用程序使用的一种新型指针。托管指针指向公共语言运行库堆的托管内存块。此堆上执行自动垃圾回收。托管指针是为通过引用传递的方法参数而产生的。某些语言提供了产生托管指针的其它方式。只有托管指针才符合 CLS。

15、不需要显式定义指针类型。在声明指针时,就确定了指针类型所需的所有信息。当指针类型为引用类型时,指针类型的值不是对象,而且无法从这样的值确定准确的类型。,9.3托管C+语言基础,(3)数组类型 数组类型是通过指定数组的元素类型、数组的秩(维数)和数组每个维度的上限和下限来定义的。尽管它们可能是在动态(而非静态)提供时标记的,但所有这些都包含在数组类型的任何签名中。精确的数组类型是在需要时由运行库自动创建的,不需要单独定义数组类型。给定类型的数组只能保存该类型的元素。 数组类型的值是对象。数组对象定义为存储数组元素类型的值的一系列位置。重复值的数量由数组的秩和边界来确定。 数组类型从类型 Syst

16、em.Array 继承而来。此类表示所有的数组,不论它们的元素类型或它们的秩如何。对数组定义的操作有:根据大小和下限信息分配数组;编制数组索引以读取或写入值;计算数组元素的地址(托管指针);以及查询秩、边界和数组中存储的值的总数。,9.3托管C+语言基础,4.封箱与拆箱 在编写程序时应该尽量减少使用引用类型,多使用值类型。但是,为了实现跨语言的操作,需要将值类型转换成引用类型,而在本地应用时为了节省资源,又需要作相反的工作。由值类型到引用类型的转换就是封箱,由引用类型到值类型的转换就是拆箱。 对一个对象或者结构进行封箱要使用_box关键字。如果想让对象或结构成为托管的封箱形式对象,只要使用_b

17、ox关键字就行了,下面的代码将objValueClassName转变成封箱形式变量: _box(objValueClassName),9.3托管C+语言基础,5 委托 运行库支持称为委托的引用类型,其作用类似于 C+ 中函数指针的用途。与函数指针不同,委托实例独立于它所封装的方法的类,它与函数不同的是增加了安全机制,在调用这样的类型变量时,并不单纯依赖于地址,还必须带有函数的参数个数、参数类型以及返回值个数和类型的详细信息描述;最主要的是那些方法与委托的类型是兼容的。另外,函数指针只能引用静态函数,而委托可以引用静态和实例方法。委托主要用于 .NET 框架中的事件处理程序和回调函数。 在托管C

18、+扩展中,委托类型由关键字_delegate来实现。所有委托都是从 System.Delegate 继承而来的,并且有一个调用列表,这是在调用委托时所执行的方法的一个链接列表。产生的委托可以用匹配的签名引用任何方法。没有为具有返回类型并在调用列表中包含多个方法的委托定义返回值。,9.3托管C+语言基础,6 异常处理 在程序的运行过程中经常会出现一些异常的情况,例如用户输入非法值或软驱没有放入软盘等非法操作。.NET平台(即CLR)支持异常处理,.NET框架的总的异常类是System.Exception,其中有许多处理异常类的方法,开发人员可以从这个总异常类来派生自己的异常类,来处理应用程序中特

19、殊问题。 下面是在托管C+代码中处理异常的代码:,9.3托管C+语言基础,try /可能会出现异常的代码 catch (异常类) /出现对应异常类可以处理的异常时执行下面代码/否则跳过此块 _finally /如果都不可处理或全部处理完毕,则做清理工作 ,9.4第一个托管C+应用程序,前面我们介绍了.NET框架和托管的C+语言基础等内容,下面通过一个简单的托管C+应用程序实例,介绍托管的C+应用程序创建过程和应用程序的基本构成。 【例9.1】创建一个托管的C+应用程序,程序用来判断用户输入的整数是否为偶数,如果是偶数则输出“此数是偶数!”,否则抛出异常。 托管的C+应用程序不像MFC应用程序那

20、样,由应用程序向导创建很多文件和代码,而是由程序员自己编写代码,不过托管的C+应用程序不像MFC应用程序那样复杂,代码很容易理解。下面是创建应用程序的步骤和代码:,9.4第一个托管C+应用程序,9.4第一个托管C+应用程序,1.创建项目 在集成开发环境的“文件”菜单下,选择“新建”,然后在选择“项目”,在弹出的对话框中选择“托管的C+应用程序”模板,将项目命令为“mych9_1”,如图9. 3所示,然后单击“确定”按钮。应用程序向导就会生成一个托管的C+项目。 2.输入代码 创建了项目之后,我们会见到“mych9_1”项目有三个文件夹,它们是源文件、头文件、资源文件等文件夹。 在文件AssemblyInfo.cpp,输入程序内容。,9.5专题讨论与作业设计,9.5.1专题讨论 (1)什么是运行时库? (2)什么是中间语言? (3)什么是委托? (4)如何处理异常? 9.5.2作业设计 编写一个求平方根的托管应用程序。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学课件 > 大学教育

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1