C#课件第一、二章.ppt_第1页
C#课件第一、二章.ppt_第2页
C#课件第一、二章.ppt_第3页
C#课件第一、二章.ppt_第4页
C#课件第一、二章.ppt_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C#网络应用编程,隋琦 285130655第一章 C#.NET概述,1.1.NET平台介绍,待解决问题:,1.什么是.NET?什么是Visual Studio .NET?有何区别? 2.NET Framework 包含哪些部分?,3.NET如何支持跨平台操作?,4.C#和.NET的关系?,自学阅读课本1.1节,思考待解决问题,第一章 C#.NET概述,1.1.NET平台介绍,自学帮助:,Visual Studio: 可视化开发平台 HTML: Hypertext Markup Language 超文本标记语言 XML:eXtensible Markup Languag

2、e 可扩展标记语言 Web Form: Web窗体编程组件 Web Service: Web服务编程组件 HTTP:HyperText Transmission Protocol 超文本传输协议 API:Application Program Interface 应用程序编程接口 SOAP:Simple Object Access Protocol 简单对象访问协议 DLL:Dynamic Link Library 动态链接库 COM:Component Object Model 组件对象模型 MSIL:MicroSoft Intermediate language 微软中间语言 SDK:So

3、ftware Development Kit 软件开发工具包 ADO:ActiveX Data Object ActiveX数据对象,第一章 C#.NET概述,1.1.NET平台介绍,问题解释:,1.什么是.NET?什么是Visual Studio .NET?有何区别? (1).NET是一个新的平台和新的技术方案,是一个新的战略,是一个新的梦想。,第一章 C#.NET概述,1.1.NET平台介绍,可运行.NET程序的操作系统的总称,如Windows XP/2000/CE/Vista,为软件提供公共性网络服务的组件,包括身份认证、系统化存储、日历、目录、软件传输等,集成和管理各种服务器应用的系列

4、软件产品,如SQL Server 2000, Application Center 2000等,.NET 框架是.NET的核心,它提供了建立和运行.NET程序所需的编辑、编译等核心服务,.NET平台 .NET是微软的XML Web Service平台,它为开发人员提供了新的开发平台(.NET Framework),新的开发语言(C#),新的开发工具(Visual Studio.NET),新的开发方式(Web Service), 为用户提供了新的产品(Windows XP,MSN,XBOX等),第一章 C#.NET概述,1.1.NET平台介绍,.NET是微软的一个新的战略。 Windows视窗的

5、二十年是微软的第一次全球战略,并且取得了巨大的成功。但随着Internet的发展和PC时代的落幕,微软的辉煌不可能仅靠Windows来延续(Linux等开放源系统的壮大)。因此,微软要借.NET完成战略转型。它把所有的产品都改写为与.NET相一致的形态,这之后微软不再主要依靠授权和销售软件光盘赚钱,而是通过在互联网上运行大量软件服务赚钱,从软件供应商向应用服务供应商(ASP)转变,这就是微软的第二次全球战略。,第一章 C#.NET概述,1.1.NET平台介绍,.NET是微软的互联网之梦,通过它来改变人们的生活方式。 大家知道,微软不仅是一个能够改变业界游戏规则的公司,更是一个能改变世界生活方式

6、的公司,之前的Windows使电脑从精英们手中的工具变成了普通大众身边不可或缺的玩具,而现在,微软正梦想着通过.NET使互联网成为人们生活中密不可分的一部分,今天来看,微软在2000年做的这个梦,正逐步变为现实。,第一章 C#.NET概述,1.1.NET平台介绍,问题解释:,1.什么是.NET?什么是Visual Studio .NET?有何区别? (2)Visual Studio.NET是支持.NET技术的一套开发工具。,第一章 C#.NET概述,1.1.NET平台介绍,问题解释:,2.NET Framework包含哪些部分?(P4图1.1),CLR(Common Language Runt

7、ime):是一个软件引擎,用于加载应用程序,检查错误,进行安全许可认证,管理内存等公共服务。,Runtime:运行时,指那些支持在特定平台上,用于运行特定编程语言所编写的软件的库(程序集)。,Web Service:与Cloud service是同义词,指的是通过网络进行分布式计算,第一章 C#.NET概述,1.1.NET平台介绍,问题解释:,3.NET 如何支持跨平台操作?(P3最后一段) .NET真的能跨平台吗? .NET只能跨越支持微软CLR的平台,但并非所有的系统都能很好的支持CLR。 课下可上网查询学习。,第一章 C#.NET概述,1.1.NET平台介绍,问题解释:,4.C#和.NE

8、T的关系? C#是一种支持.NET开发的编程语言(专门为.NET应用而开发的) C#属于.NET吗? C#和.NET的关系就像游泳时水(.NET平台)和救生圈(C#)的关系。C#不属于.NET,但又离不开.NET(救生圈不属于水池,但离开水池又没有用处)。同时,游泳时,你可以用救生圈,也可以用其他装备,比如救生衣、木头等,在进行.NET开发时,你可以用C#,也可以用其他语言(C+等)。,第一章 C#.NET概述,1.1.NET平台介绍,课下扩展学习:,根据个人兴趣通过网络或图书了解下列内容: 1. 课上涉及到的你所不熟悉的名词。 2.CLR公共语言运行时的构成和工作原理。 3.NET基础类库(

9、BCL)的结构。,第一章 C#.NET概述,1.2C#语言简介,待解决问题:,1.C#语言的特点?,自学阅读课本1.2节,思考待解决问题,问题解释:,1.C#语言的特点?P5P7:1-7,第一章 C#.NET概述,1.2C#语言简介,课下扩展学习:,根据个人兴趣通过网络或图书了解下列内容: 1. 托管代码与非托管代码 2. 面向对象概念的三种基本原则:继承、封装和多态(第三章) 3. 元数据。 4. C#在编程语言中的排名。,第一章 C#.NET概述,1.3Visual C#.NET集成开发环境,上机演示课,C#应用程序创建方法: 编辑器(文本编辑器、记事本)+.NET SDK 集成开发环境I

10、DE(Visual Studio.NET 2005/2008/2010),1.4创建第一个C#.NET程序,第一章 C#.NET概述,1.3Visual C#.NET集成开发环境,本章上机练习:,通过两次上机,完成下列内容并以小组为单位提交学习报告: 对照课本,熟悉C#的IDE环境 创建例1-1程序并观察运行结果 改写例1-1程序:增加注释去除引用后观察编译结果修改Main方法的修饰符、参数及大小写,观察编译结果利用MSDN,学习WriteLine()方法去掉程序最后一句,观察结果 创建例1-2程序并观察运行结果 寻找例1-2中的Main()方法,1.4创建第一个C#.NET程序,第二章 C#

11、基础编程,2.1C#数据类型,2.1.1标识符与关键字 待解决问题:,1. 了解C#中的关键字 2. C#中标识符的命名规则,自学阅读课本2.1.1节,思考待解决问题,第二章 C#基础编程,2.1C#数据类型,2.1.1标识符与关键字 问题解释:,2. C#中标识符的命名规则 (1)有效符号:字母、数字、下划线、 (2)不能以数字开头 (3)大小写敏感 (4)只能用于开头,作为标识符前缀,以开头的标识符称为“逐字标识符”,其作用是使用关键字作为标识符,如bool,int;非关键字前也可加,如student。但为了风格一致,强烈不建议这样做。,第二章 C#基础编程,2.1C#数据类型,2.1.2

12、C#数据类型,注意:数值类型存储数据值,引用类型存储数据的地址。除指针外共21种类型,请在P15页表2.1中标示出对应关键字,第二章 C#基础编程,2.1C#数据类型,2.1.2C#数据类型,1. 值类型 待解决问题:,1. 各种数值类型的定义方法,数据范围,2. float, double和decimal的本质区别?,3. 十进制数值常数的后缀,自学阅读课本2.1.2节,思考待解决问题,第二章 C#基础编程,2.1C#数据类型,2.1.2C#数据类型,1. 值类型 问题解释:,2. float,double和decimal的本质区别? (为何要引入decimal类型?) float和doub

13、le进行运算时会存在舍入误差。,如double型常数10.00-9.90= ? Decimal型常数10.00m-9.90m= ?,0.0999999999999996,0.10m,第二章 C#基础编程,2.1C#数据类型,2.1.2C#数据类型,十进制小数的二进制存储:乘2取整法,(0.625)10=(0.101)2 小数部分不断乘2,取出整数部分,直到小数部分为0或形成循环小数为止。 由此可见,只有 及其组合的小数才可以被精确表示(0.625 是1/2+1/8),其余小数只能近似表示,因此浮点数运算存在舍入误差。,第二章 C#基础编程,2.1C#数据类型,2.1.2C#数据类型,1. 值类

14、型 问题解释:,2. float,double和decimal的本质区别? (为何要引入decimal类型?) decimal类型存储方式是用1位表示符号,96位存储整数,其余位存储10的幂次(称为变比因子,决定了小数点的位置),因此可以精确表示取值范围内的小数,适合于精确计算。,第二章 C#基础编程,2.1C#数据类型,2.1.2C#数据类型,1. 值类型 问题解释:,3. 十进制数值常数的后缀 在C#中,如果一个十进制常数不带小数点,则C#自动将其判断为整型(int,uint,long,ulong之一,具体视数值范围而定),若带小数点,则自动判断为double型。如果不希望C#自动判断,可

15、通过为其加后缀的方式来指定该数值常数的类型。 另外,若数值超出后缀所代表的类型的取值范围,C#将报错。,第二章 C#基础编程,2.1C#数据类型,2.1.2C#数据类型,2. 引用类型(对象类型,类类型,字符串类型,接口类型,数组类型,代理类型) 待解决问题:,1. C#中的三种数组,如何定义?,2. 数组如何进行初始化?,3. 对象类型和字符串类型,自学阅读课本2.1.3节,思考待解决问题1、2,第二章 C#基础编程,2.1C#数据类型,2.1.2C#数据类型,2. 引用类型 问题解释:,2. 数组如何进行初始化? C#中数组的初始化分为静态初始化和动态初始化(课本方法),(1)静态初始化

16、例:int a=1,2,3,4; int , a=1,2,3,4,5,6;,注意:静态初始化必须与数组的声明在同一语句中,不可分开进行,否则会报错。 如:int a; a=1,2,3;/错误 另外,数组的数组(不规则数组)不能进行静态初始化。,第二章 C#基础编程,2.1C#数据类型,2.1.2C#数据类型,2. 引用类型 问题解释:,(2)动态初始化 例:int num=new int31,2,3/声明的同时进行动态初始化 int num; /单独进行动态初始化, num=new int3;/若此时未赋值,则所有元素默认值为0 int array=new int2 new int21,2,n

17、ew int33,4,5; 或 int array=new int2 ;/不规则数组初始化时, array0=new int21,2;/只指定其中数组个数, array1=new int33,4,5;/不指定每个数组的长度。,注意:利用动态初始化的方法,可以动态修改数组长度,例如: int x=new int5;/此时定义数组长度为5 然后可通过重新动态初始化改变数组长度: int x=new int10;/数组长度改为10,第二章 C#基础编程,2.1C#数据类型,2.1.2C#数据类型,2. 引用类型 问题解释:,3. 对象类型和字符串类型?,(1)对象类型 对象类型由关键字object定

18、义,它是一种新增加的类类型,在C#中,对象类型是所有其他类型的最终基类,几乎所有的数据类型都是直接或间接的从object类型继承来的,所以,定义为object类型的变量可以接受任何类型的数值。,示例程序:ObjectUse,第二章 C#基础编程,2.1C#数据类型,2.1.2C#数据类型,2. 引用类型 问题解释:,3. 对象类型和字符串类型?,(2)字符串类型 在C/C+中没有string类型,因此使用字符数组来表示字符串,而在C#中,只能使用string类型的变量来表示字符串,用字符数组定义字符串是“非法”的。 定义方法:string 变量名;/只定义 string 变量名=“字符串”;/

19、定义同时初始化 string类型变量是string类的一个实例(对象),可以使用string类中封装的各种处理字符串的属性和方法。,示例程序:StringUse,第二章 C#基础编程,2.1C#数据类型,2.1.3常量与变量,待解决问题:,常量的定义与使用? 变量的定义与使用?,3. 变量和常量的作用域?,4. 变量名的命名方法?,自学阅读课本2.1.4节,思考待解决问题1、2、3,第二章 C#基础编程,2.1C#数据类型,2.1.3常量与变量,问题解释:,3. 变量和常量的作用域 一般原则:在没有任何修饰符和命名冲突的情况下,C#中变量和常量定义所在的代码块既是其作用域。,第二章 C#基础编

20、程,2.1C#数据类型,2.1.3常量与变量,问题解释:,3. 变量和常量的作用域,注意:变量(常量)同名问题 (1)同一函数内的嵌套语句块内,不允许同名变量 例:static void Main( ) int i, j; for(i=0, i3, i+) int j=1;/命名冲突 ,第二章 C#基础编程,2.1C#数据类型,2.1.3常量与变量,问题解释:,(2)同一函数内的平行语句块内,可定义同名变量,其作用域在各自语句块内有效 例:static void Main( ) int i, j; for(i=0, i3, i+) int k=1; for(j=0, j2, j+) int k

21、=2;/与前面定义的k不相关 ,第二章 C#基础编程,2.1C#数据类型,2.1.3常量与变量,问题解释:,(3)类成员变量可与类中函数内的变量同名 例:class program( ) int i;/作用域为整个域内 static void Main( ) int i;/作用域为Main函数内 ,应尽量避免使用同名变量,以免引起混乱。,第二章 C#基础编程,2.1C#数据类型,2.1.3常量与变量,问题解释:,4. 变量的命名方法 我们在初学语言时,喜欢用简单字母来命名变量,如int i,float a等,而这种方式在商业代码中是一种非常不好的习惯,因为其难以辨识和理解,变量名最好使用具有实

22、际意义的英文单词进行组合,做到“见名知意”,常用的变量名表示方法有三种: (1)Pascal表示法 由变量名指定变量是什么或它要做什么,格式为Noun或NounVerb,如CircleRedius表示它存储的是圆半径,StackRead表示它要读取栈元素。 (2)骆驼表示法 以小写字母开头,以后的单词都以大写字母开头,如myBook,SizeOfChar,第二章 C#基础编程,2.1C#数据类型,2.1.3常量与变量,问题解释:,(3)匈牙利表示法 变量名=属性名+类型名+对象描述 如:c_iMyBook,表示这是一个整型常量,const,int,m_uArrayLength,表示这是一个无符

23、号类成员存放数组长度,member,第二章 C#基础编程,2.1C#数据类型,2.1.4数据类型之间的转换 2.1.5 装箱与拆箱,待解决问题:,隐式转换的一般原则与合法的隐式转换 常见的显式转换 显式类型转换时的精度损失 Convert类的常用方法,5. 装箱与拆箱操作的方法,自学阅读课本2.1.5, 2.1.6节,思考待解决问题1、2、3、4,第二章 C#基础编程,2.1C#数据类型,2.1.4数据类型之间的转换 2.1.5 装箱与拆箱,问题解释:,5. 装箱与拆箱操作的方法 P23“装箱和拆箱都必须遵循类型兼容原则”装入什么,拆出什么,第二章 C#基础编程,2.1C#数据类型,2.1.4

24、数据类型之间的转换 2.1.5 装箱与拆箱,问题解释:,5. 装箱与拆箱操作的方法 验证程序: using System; class UnBoxing public static void Main( ) int i=10; object obj=i;/装箱 int j=(int) obj;/拆箱 short k=(short) obj;/提示异常 Console.WriteLine(“i=0,obj=1,j=2,k=3”,i,obj,j,k); ,第二章 C#基础编程,2.1C#数据类型,上机练习:,自编程序,验证decimal和double的区别 自编程序,练习使用数组 编辑对象和字符串

25、示例程序并运行,理解这两种引用类型 利用MSDN,了解string类型的其它属性和方法 自编程序,验证同名变量的作用域。 自编程序,练习使用隐式转换和显示转换,注意观察非法转换时的调试信息。 自编程序,练习使用装箱和拆箱操作。,第二章 C#基础编程,2.2表达式与运算符,待解决问题:,1. 了解C#中的运算符 2. 特殊运算符的作用及用法,自学阅读课本2.2节,思考待解决问题,第二章 C#基础编程,2.2表达式与运算符,问题解释:,2. 特殊运算法的作用及用法 checked和unchecked运算符用于启动(取消)整型算数运算或显示转换时的溢出检查。 (1)checked 示例代码: usi

26、ng System; class UseChecked; public static void Main( ) short a=32767; short b=32767; int c= checked(short)(a+b);/检查溢出,此句引起异常 Console.WriteLine(“被检查的值是:0”,c); ,第二章 C#基础编程,2.2表达式与运算符,问题解释:,(1)checked 此程序编译时没有任何问题,但运行时,会输出提示:算数运算导致溢出。如去掉checked,运行结果为: 被检查的值是:-2(自行分析运行结果) 这表明,checked运算符(unchecked)在进行溢出

27、检查时,对于非常数表达式在运行时将引起异常。,第二章 C#基础编程,2.2表达式与运算符,问题解释:,(2)unchecked 示例代码: using System; class UseUnchecked const int a=2147483647;/最大整数 const int b=-2; public static void Main( ) int c=unchecked(a*b);/不检查溢出 Console.WriteLine(“不经过检查的值是:0”,c); ,第二章 C#基础编程,2.2表达式与运算符,问题解释:,(2)unchecked 程序运行结果是: 不经过检查的值是:-2

28、 若去掉unchecked,则通不过编译,这表明,checked和unchecked在进行溢出检查时,常数表达式若溢出将导致编译时错误。,第二章 C#基础编程,2.3流程控制,待解决问题:,1. 各种流程控制语句的用法 2. foreach语句的作用和用法 3. break和continue的区别,自学阅读课本2.3节,思考待解决问题,第二章 C#基础编程,2.3流程控制,问题解释:,2. foreach语句的作用和用法 foreach(类型 标识符 in 表达式) 循环体; 其作用是将表达式所代表的集合中的每一个元素依次赋值给标识符,并进行循环。循环次数由集合元素个数决定,集合可以是数组、枚

29、举、类类型、接口类型) 注意:P32页错误,foreach并非C#中独有,Visual Basic中也有,但功能没有C#中强,在VB中用于对枚举集合或数组中每个元素执行循环体。,第二章 C#基础编程,2.4C#异常处理,待解决问题:,1. 什么是异常?什么是异常处理? 2. C#的异常处理机制?,3. Try,catch,throw,finally语句的用法及功能。,4. .NET Framework中的异常类,自学阅读课本2.4节,思考待解决问题,第二章 C#基础编程,2.4C#异常处理,问题解释:,1. 什么是异常?什么是异常处理? (1)所谓异常就是指在程序运行期间发生的错误或意外情况。

30、 用户输入错误 计算机物理限制(如内存、硬盘空间不足) 外部设备错误(如远程服务器、打印机等未开启) 代码逻辑错误(如无效数组下标、无效文件) ,第二章 C#基础编程,2.4C#异常处理,问题解释:,1. 什么是异常?什么是异常处理? (2)异常可能造成数据丢失或程序突然终止,所以我们希望在应用程序出现异常时,能以一种友好的方式来妥善处理 提示程序中出现的异常种类 保存已完成的工作 能返回到某种安全状态或者安全退出 目前,我们使用的一些应用程序,在运行异常时往往可以以对话框的形式给出一些异常提示,而部分异常处理不好的程序,则可能出现死机、数据丢失等情况。,第二章 C#基础编程,2.4C#异常处

31、理,问题解释:,2. C#的异常处理机制? .NET Framework提供了一套特有的异常处理机制,称为“异常控制”。使用C#语言的异常控制机制,当程序出现异常时,程序流程可以自动的从异常产生的地方转交给“异常控制处理”模块,由该模块对异常进行处理,可以给出出错方位,并能控制程序正常结束。 例:未进行异常控制的代码,第二章 C#基础编程,2.4C#异常处理,问题解释:,2. C#的异常处理机制? using System; Class MyExcep public static void Main( ) int nums=new int4; nums6=10;/异常,越界访问数组 Conso

32、le.WriteLine(“At the end of test.”); ,程序编译时不会报错,但运行时会出现一个异常提示: 未处理的异常:System.IndexOutOfRangeException:索引超出数组界限。在MyExcep.Main( ) 位置 e: 行号10. 程序最后一句(输出“At the end of test.”) 并未执行。,第二章 C#基础编程,2.4C#异常处理,问题解释:,2. C#的异常处理机制? 从运行结果可以看出,在未进行异常控制的情况下,虽然有异常提示,但程序并未正常结束。另外,给出的提示过于专业,并非用户需要看到的“友好”的提示。 若要解决这些问题,

33、可以使用C#的异常控制机制。,第二章 C#基础编程,2.4C#异常处理,问题解释:,2. C#的异常处理机制? C#的异常控制机制由.NET Framework的公共语言运行时提供,既是使用四个关键字try,catch,throw和finally来实现结构化的,统一的和类型安全的异常处理。 在这个机制中,使用对象来表示异常(C#中几乎所有的异常都是System.Exception类或其派生类的实例对象),并把想要监视异常的代码和异常处理的代码分别放在try和catch语句块中,C#会自动抛出系统检测的异常(一个对象),然后交由catch语句块处理。也可以使用throw语句人为抛出异常。不论是否

34、发生了异常,都可使用finally语句块做善后处理,使程序正常结束。,第二章 C#基础编程,2.4C#异常处理,问题解释:,3. try,catch,throw和finally的用法? (1)try/catch语句块 “C#的异常控制指的是在程序中加入异常控制代码,提供更为明确的处理结果,而不是弹出窗口,终止程序并显示乏味的信息。” 为此使用try/catch语句块配合完成捕获异常和处理异常的任务。 try和catch语句块必须同时使用,通常情况下,try可配合多个catch子句,每个catch子句对应一种特定的异常(就像switchcase语句),其基本格式为:,第二章 C#基础编程,2.4

35、C#异常处理,问题解释:,3. try,catch,throw和finally的用法? try /需要监视异常的代码 catch(异常类型1 异常类的对象) /处理异常类型1的异常处理代码 catch(异常类型2 异常类的对象) /处理异常类型2的异常处理代码 ,执行过程为:当try子句的程序代码产生异常时,系统就会在catch子句中查找与设置的异常类型相同的catch子句,若有,自动跳转到该子句,若没有,则运行时会产生一个未处理的异常。,第二章 C#基础编程,2.4C#异常处理,问题解释:,3. try,catch,throw和finally的用法? catch子句也可以不带任何参数,这是c

36、atch子句将捕获所有类型异常,这就好比switchcase中的default语句,如果try块中没有发生异常,则所有catch语句被忽略,程序转到最后一个catch之后的第一条语句开始执行。 下面通过四个实例来了解try/catch语句的用法,第二章 C#基础编程,2.4C#异常处理,问题解释:,示例代码1:try/catch的一般处理过程 using System; class MyExcep1 public static void Main() int nums = new int4; try Console.WriteLine(A exception isnt generated.);

37、 nums6 = 10; /出错!越界访问数组元素 Console.WriteLine(This wont be played!); catch Console.WriteLine(A exception is caught!); Console.WriteLine(At the end of test.); ,运行结果: A exception isnt generated. A exception is caught! At the end of test.,异常发生前语句正常执行 发生异常后跳转到catch执行异常处理完执行catch后语句,第二章 C#基础编程,2.4C#异常处理,问题

38、解释:,示例代码2:一个方法(函数)产生的异常,可被调用该方法的try块捕获。 using System; class MyExcep2 public static void GenException() int nums = new int4; Console.WriteLine(A exception isnt generated.); nums6 = 10; /出错!越界访问数组元素 Console.WriteLine(This wont be played!); ,第二章 C#基础编程,2.4C#异常处理,问题解释:,示例代码2:一个方法(函数)产生的异常,可被调用该方法的try块捕获

39、。 class App public static void Main() try MyExcep2.GenException(); catch Console.WriteLine(A exception is caught!); Console.WriteLine(At the end of test.); ,运行结果: A exception isnt generated. A exception is caught! At the end of test.,异常发生前语句正常执行 捕获处理被调用方法中的异常异常处理完执行catch后语句,第二章 C#基础编程,2.4C#异常处理,问题解释

40、:,示例代码3:捕获处理多个异常并给出异常类型信息 using System; class MyExcep3 public static void Main() int nums1 = 22, 33, 44, 66, 99 ; int nums2 = 2, 0, 4, 0 ; for (int i = 0; i nums1.Length; i+) try Console.WriteLine(nums1i +/+nums2i+is+nums1i/ nums2i); catch (DivideByZeroException e) /捕获除异常 Console.WriteLine(Cant divi

41、ded by zero!n); ,第二章 C#基础编程,2.4C#异常处理,问题解释:,示例代码3:捕获处理多个异常并给出异常类型信息 catch (Exception e) /捕获通用异常 Console.WriteLine(The following exception is caught by Exception:n0, e); Console.WriteLine(At the end of test.); ,运行结果: 22/2 is 11 Cant divided by zero! 44/4 is 11 Cant divided by zero! The following exce

42、ption is caught by Exception: System.IndexOutOfRangeException :索引超出了数组界限。 在MyExcep3.Main() 位置 e: 行号:13 At the end of test.,第二章 C#基础编程,2.4C#异常处理,问题解释:,示例代码3:捕获处理多个异常并给出异常类型信息 注意: catch语句只响应类型相匹配的异常,而通用异常类型catch(Exception e)则捕获所有抛出的异常。因此在程序中应注意catch语句的顺序。通常将捕获特定类型异常的catch语句放在通用异常类型语句之前。 若想输出异常类型信息,可使用

43、异常类对象e及其成员。如示例代码中Console.WriteLine(“The following exception is caught by Exception:n0”,e); 这样便可在输出中获取异常类型及位置的信息。若只想获取异常提示信息,则可使用e的Message属性: Console.WriteLine(“The following exception is caught by Exception:n0”, e.Message); 相应的输出为:The following exception is caught by Exception: 索引超出了数组界限。,第二章 C#基础编程

44、,2.4C#异常处理,问题解释:,示例代码4:嵌套使用try/catch 一个try块可嵌套在另一个try块中,内层try块产生的异常如未被内层catch块处理,则会被传播到外层try块,由外层catch语句来处理。 using System; class MyExcep4 public static void Main() int nums1 = 22, 33, 44, 66, 88, 99 ; int nums2 = 2, 0, 4, 0 ; try/外层try for (int i = 0; i nums1.Length; i+) ,第二章 C#基础编程,2.4C#异常处理,问题解释:,

45、示例代码4:嵌套使用try/catch try/内层try Console.WriteLine(nums1i+/+nums2i+is+nums1i/nums2i); catch (DivideByZeroException) /内层catch,捕获除异常 Console.WriteLine(Cant divided by zero!n); catch (IndexOutOfRangeException) /外层catch,捕获索引越界异常 Console.WriteLine(The index of array is out!); Console.WriteLine(At the end of

46、 test.); ,运行结果: 22/2 is 11 Cant divided by zero! 44/4 is 11 Cant divided by zero! The index of array is out! At the end of test.,第二章 C#基础编程,2.4C#异常处理,问题解释:,示例代码4:嵌套使用try/catch 注意: 内层try/catch可处理除0错误,而索引越界错误由外层处理。由于外层catch不在for循环内,当其处理完后,程序就执行其后面一条语句,正常退出了,所以只显示一次越界错误。 在实际应用中,嵌套try/catch很常见,通常在内层处理特定

47、类型的“不太严重”的异常,而在外层使用处理通用类型异常的catch块来处理未被内层处理的“严重”的错误。,第二章 C#基础编程,2.4C#异常处理,问题解释:,3. try,catch,throw和finally的用法? (2)throw语句块 C#中抛出异常有两种方式:一种是运行出现异常时系统自动为应用程序抛出异常,前面所有的例子都属于此类;另一种就是在程序中使用throw语句人为抛出异常。throw语句的格式为: throw 异常类的对象; throw; 之所以人为抛出异常,主要有两种情况:,第二章 C#基础编程,2.4C#异常处理,问题解释:,3. try,catch,throw和fin

48、ally的用法? (2)throw语句块 用户自定义异常(比如在程序中某处运算结果取值范围=100,若超过则视为异常),这种异常在.NET Framework定义的异常类中没有,因此系统不会自动抛出,此时要使用throw语句人为抛出。 为了更好的处理异常。利用throw语句可以将已被catch捕获的异常再次抛出,交由外部的catch处理,因为有时一个异常处理块只能处理异常的一个方面,而另一个异常处理块则可以处理异常的另一个方面。这种情况下,再次抛出异常时,throw语句不需要指定异常类的对象。,第二章 C#基础编程,2.4C#异常处理,问题解释:,3. try,catch,throw和fina

49、lly的用法? 示例代码5:人为抛出异常 using System; class MyThrow public static void Main( ) try Console.WriteLine(Before throw.); throw new DivideByZeroException(); /人为抛出除0异常类的对象 catch (DivideByZeroException) Console.WriteLine(Exception is caught!); Console.WriteLine(At the end of test.); ,运行结果: Before throw. Excep

50、tion is caught! At the end of test.,第二章 C#基础编程,2.4C#异常处理,问题解释:,3. try,catch,throw和finally的用法? 示例代码6:再次抛出已捕获的异常 using System; class ReThrow public static void GenException( ) int nums1 = 22, 33, 44, 66, 99 ; int nums2 = 2, 0, 4, 0 ; for (int i = 0; i nums1.Length; i+) try Console.WriteLine(nums1i + /

51、 + nums2i + is + nums1i / nums2i); catch (DivideByZeroException) /捕获除0异常 Console.WriteLine(Cant divided by zero!); ,第二章 C#基础编程,2.4C#异常处理,问题解释:,catch (IndexOutOfRangeException) /捕获索引越界异常 Console.WriteLine(The index of array is out!); throw; /再次抛出异常 class App public static void Main() try ReThrow.GenException(); /调用方法 catch (IndexOutOfRangeException) Console.WriteLine(Accept the exception about index of array.); Console.WriteLine(At the end of test.); ,运行结果: 22/2 is 11 Cant divided by zero! 44/4 is 11 Cant divided by zero! The index of ar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论