《中国石油大学C#语言基础分析教学文稿.ppt》由会员分享,可在线阅读,更多相关《中国石油大学C#语言基础分析教学文稿.ppt(90页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、中国石油大学中国石油大学C#C#语言基语言基础分析础分析2前 言n教材:C#程序设计与案例教程,杨树林、胡洁萍编著,清华大学出版社,2007.08n参考书:C#入门经典(第5版),(美)沃森、内格尔等著,齐立波翻译,清华大学出版社,2010.12n上课时间:n周二1、2节,西廊101,第7-10、13-17周n周四3、4节,西廊101,第7-8、10、14、16周n上机时间:n周一1、2节,微601,第9-10、13-17周n周三1、2节,微601,第9、13、15周3课程主要内容 n第1章 C#语言基础n第2章 面向对象程序设计n第3章 GUI程序设计n第4章 图形、图像程序设计n第5章 数
2、据库程序设计n第6章 流和文件n第7章 线程(不讲)n第8章 网络程序设计(不讲)n第9章 ASP.NET(不讲)第第1章章 C#语言基础语言基础5第1章 目录1.1 C#概述1.2 C#语言基础1.3 控制语句1.4 数组1.5 异常处理61.1 C#概述概述n1、.NET概述n2、什么是C#n3、Visual Studio.Net集成开发环境n4、初识C#程序n5、命名空间71.1.1.NET概述n.NET是微软公司推出跨平台、跨语言开发平台。机器语言汇编语言高级语言硬件依赖高硬件依赖低可移植性低可移植性高可复用性低可复用性高81.1.1.NET概述FORTRANC.NET(C#)源代码复
3、用二进制码复用Java跨平台跨语言91.1.1.NET概述n.NET Framework体系结构101.1.1.NET概述nCLR和MSIL(CIL)111.1.1.NET概述nCLR和MSIL(CIL)121.1.1.NET概述nCLR和MSIL(CIL)编译C#|-程序集(.exe、.dllMSIL)、元信息数据信息、可选资源图片、声音)|(Microsoft Intermediate Language 微软中间语言)|-.NET CLR(Common Language Runtime 公共语言运行库)|-JIT编译(Just-In-Time,称为即时编译,仅在需要时才编译MSIL)|机器
4、代码 131.1.1.NET概述nCLR和MSIL(CIL)n有了CLR,保证了.NET 中一种语言具有的功能其他语言也都具有。nMicrosoft 中间语言(MSIL)由一组特定的指令组成,这些指令指明如何执行代码。nJIT 编译器的主要工作是将普通 MSIL 代码转换为可以直接由 CPU 执行的计算机代码。n系统进程可以轻松读取 MSIL 代码。141.1.1.NET概述n.NET组成nNET平台包括.NET框架-NET框架(Framework)是开发平台的基础n公共语言运行时(CLR)n.NET类库n.NET开发工具等组成部分。n.NET编程语言(C+.NET C#.NET VB.NET
5、)n.Visual Studio.NET集成开发环境15.Net Framework.Net Framework.Net Framework 类库类库类库类库ASP.NETCLRCLR1.1.1.NET概述16n.NET版本1.1.1.NET概述17nCLS(Common Language Specification):不同语言程序之间相互通用必须遵守的规则和限制。nCTS(Common Type System):CLS中对数据类型的规定。1.1.1.NET概述181.1.2 什么是C#nC#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#由C语言和C+派生而来,继承了其强大的
6、性能,同时又以.NET 框架类库作为基础,拥有类似Visual Basic的快速开发能力。C#由安德斯海尔斯伯格主持开发,微软在2000年发布了这种语言。n原Borland公司的首席研发设计师安德斯海尔斯伯格(Anders Hejlsberg)在微软开发了Visual J+1.0,很快的Visual J+由1.1版本升级到6.0版。SUN公司认为Visual J+违反了Java开发平台的中立性,对微软提出了诉讼。2000年6月26日微软在奥兰多举行的“职业开发人员技术大会”(PDC 2000)上,发表新的语言C#。C#语言取代了Visual J+,语言本身深受 Java、C 和 C+的影响。1
7、91.1.2 什么是C#n版本 C#版本变化和.Net Framework版本变化一样,新版本总是在旧版本基础上增加了新的功能或增强了已有功能。201.1.2 什么是C#n语言特征,相对于C和C+,C#在许多方面进行了限制和增强:n指针(Pointer)只能被用于不安全模式。大多数对象访问通过安全的引用实现,以避免无效的调用。n对象不需要被显式释放,代替为当不存在被引用时通过垃圾回收器回收。n只允许单一继承(single inheritance),但是一个类可以实现多个接口(interfaces)。nC#比C+更加类型安全。默认的安全转换是隐含转换,例如由短整型转换为长整型和从派生类转换为基类
8、。而布尔型同整型,及枚举型同整型不允许隐含转换。n数组声明语法不同(int a=new int5 而不是 int a5)。n属性支持,使用类似访问成员的方式调用。211.1.3 Visual Studio.NET集成开发环境nVisual Studio集成开发工具不同版本22Microsoft Visual Studio起始页23新建项目对话框24n代码编辑器,用于编写源代码。n“工具箱”,用于使用鼠标迅速开发可视化界面。n解决方案资源管理器,用于查看和管理项目文件和设置。n项目设计器,用于配置编译器选项、部署路径、资源及更多其他内容。n属性窗口,用于配置用户界面中控件的属性和事件。nVisu
9、al Studio 调试器,用于对程序进行测试。n类视图,用于根据类型(而不是文件)在源代码中导航。n对象浏览器,用于查看.NET Framework 程序集和 COM 对象中可用的方法和类。25Visual Studio.NET集成开发环境26属性窗口 属性描述控件选择事件图标属性图标属性名属性值按字母排序271.1.4 初识C#程序【例例1-1】一个简单的控制台程序。nC#语言使用类来组织和包装代码,所有可执行代码都必须包含在类中。nusing指令用于声明程序中使用的系统类所在的命名空间。如:Console类包含在System命名空间中。/声明系统命名空间using System;usin
10、g System.Collections.Generic;using System.Linq;using System.Text;/用户自定义命名空间namespace Exam_1_1 /程序开始类:Program /class Program /应用程序的主入口方法:Main /static void Main(string args)Console.WriteLine(请输入你的名字:);string username=Console.ReadLine();Console.WriteLine(欢迎0进入C#世界!,username);281.1.4 初识C#程序【例例1-1】一个简单的控
11、制台程序。n注释方式:n单行注释 /注释内容n多行注释/*注释第1行注释第n行 */n文档注释 /文档注释 即XML注释,将文档注释的内容转为XML文档保存。/声明系统命名空间using System;using System.Collections.Generic;using System.Linq;using System.Text;/用户自定义命名空间namespace Exam_1_1 /程序开始类:Program /class Program /应用程序的主入口方法:Main /static void Main(string args)Console.WriteLine(请输入你的名
12、字:);string username=Console.ReadLine();Console.WriteLine(欢迎0进入C#世界!,username);291.1.4 初识C#程序【例例1-1】一个简单的控制台程序。nMain方法:nMain 方法是 C#控制台应用程序或窗口应用程序的入口点,程序控制流在该处开始和结束。nMain 在类或结构的内部声明。Main 方法必须是静态的,且不应该是公用的(默认访问级别是 private)但不要求所在类或结构是静态的。nMain 的返回类型有两种:void 或 int。nMain 方法可以包含命令行参数 string,也可以不具有这样的形参。301
13、.1.4 初识C#程序【例例1-1】一个简单的控制台程序。n控制台输入、输出n使用.NET Framework中 System 命名空间中的Console类提供的输入输出方法。n输入:Console.Read();/读取一个字符 Console.ReadLine();/读取一行字符n输出:Console.Write();/以文本形式输出 Console.WriteLine();/以文本形式输出并换行 若输出若干变量值,则用 0 表示第一项,1 表示第二项,依此类推,如:int year=1066;string battle=Battle of Hastings;Console.WriteLin
14、e(The 0 took place in 1.,battle,year);311.1.4 初识C#程序【例例1-2】一个图形界面程序。设计一个程序,界面上用一个文本框输入姓名,单击“确定”按钮后,在文本框中显示“欢迎XXX进入C#世界!”,运行结果如下图所示。321.1.5 命名空间n命名空间类似于文件系统中的文件夹,可以看作相关类的一个容器。n命名空间分为两类:用户定义的命名空间、系统定义的命名空间。n系统命名空间:NET Framework 本身有八十多个命名空间,每个命名空间中有上千个类。System.Drawing:提供了GDI+基本绘图功能;System.IO:提供数据文件读写等功
15、能;System.Collections:提供了列表、队列等集合操作n用户定义的命名空间是在代码中定义的命名空间。331.1.5 命名空间namespace 命名空间名称 用户代码n命名空间可以嵌套n命名空间的使用n使用using指令能够引用给定的命名空间或创建命名空间的别名(using 别名)。using 别名=类或命名空间名;如:using System;using System.Drawing;using StatisticalData;namespace StatisticalData class FileHandling public void Load()/code to load
16、 statistical data namespace Images class FileHandling public void Load()/code to load an image file class Program static void Main()StatisticalData.FileHandling data=new StatisticalData.FileHandling();data.Load();Images.FileHandling image=new Images.FileHandling();image.Load();34命名空间命名空间类的描述类的描述Syst
17、em定义通常使用的数据类型和数据转换的基本.NET类。System.Collections定义列表、队列、位数组合字符串表。System.Data定义ADO.NET数据库结构。System.Drawing提供对基本图形功能的访问。System.IO允许读写数据列和文件。System.Net提供对Windows网络功能的访问。System.Net.Sockets提供对Windows套接字的访问。1.1.5 命名空间n系统定义的命名空间351.2 C#语言基础 n1、基本编码规则n2、数据类型n3、数据类型转换n4、常量与变量n5、装箱与拆箱n6、运算符361.2.1 基本编码规则nC#语言中,标
18、识符是以字母、下划线(_)或开始的一个字符序列,后面可以跟字母、下划线、数字。C#语言区分大小写。n具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字或关键字。n书写规则书写规则n每行语句以;结尾。n空行和缩进被忽略。n多条语句可以处于同一行,之间用分号分隔即可。n注释:有3种方式。371.2.2 数据类型n数据类型分类1:可分为内置类型和构造类型。数据类型数据类型内置类型内置类型构造类型构造类型(自定义类型)(自定义类型)objectstringbyte,sbyteshort,ushortint,uintlong,ulongfloat,double,decimalboolc
19、har数组结构struct枚举enum类class接口interface委托delegate381.2.2 数据类型n数据类型分类2:按数据的存储方式,可分为值类型和引用类型。数据类型数据类型值类型值类型引用类型引用类型数值类型bool,char结构枚举string数组类接口委托说明:说明:1、所有的数据类型是以类的形、所有的数据类型是以类的形式组织的;式组织的;2、数据类型的根基类是、数据类型的根基类是object类;类;3、定义、定义值类型变量值类型变量时,直接使时,直接使用即可;定义用即可;定义引用型变量引用型变量时,需时,需先使用先使用new分配内存,但分配内存,但string类型除外
20、。类型除外。401.2.2 数据类型n类型的层次结构称为通用类型系统CTS(Common Type System)41n值类型值类型n各种值类型总是含有该类型的一个值。每当把一个值赋给一个值类型时,该值实际上被拷贝了。n相比,对于引用类型,仅是引用被拷贝了,而实际的值仍然保留在原来的内存位置。nC#的值类型可以归类如下:n 内置类型(Simple type)n 枚举类型(Enumeration type)n 结构类型(Structure type)1.2.2 数据类型421.2.2 数据类型n值类型值类型内置类型内置类型整数整数431.2.2 数据类型n值类型值类型内置类型内置类型实数实数n值
21、类型值类型内置类型内置类型字符型字符型nUnicode 字符是 16 位字符,用于表示世界上大多数已知的书面语言。441.2.2 数据类型n值类型值类型内置类型内置类型字符型字符型n值类型值类型内置类型内置类型布尔型布尔型n布尔型只有true、false两个值,且不对应于任何整数值。char chars=new char4;chars0=X;/Character literal chars1=x0058;/Hexadecimal chars2=(char)88;/Cast from integral type chars3=u0058;/Unicode foreach(char c in ch
22、ars)Console.Write(c+);/Output:X X X X 451.2.2 数据类型n值类型值类型枚举类型枚举类型n默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。enum Days Sat,Sun,Mon,Tue,Wed,Thu,Fri;n也可以更改默认值。enum Days Sat=1,Sun,Mon,Tue,Wed,Thu,Fri;nenum和整型之间的转换需要用显式类型转换来完成,即使用强制转换。int x=(int)Days.Sun;或 x=Convert.ToInt32(Days.Sun);注:Convert可以转换字符串。【例1-3】定义一个职
23、称枚举类型,输出类型中所有枚举常量。461.2.2 数据类型n值类型值类型结构类型结构类型n用 struct 关键字定义的,如:public struct PostalAddress /Fields,properties,methods and events go here.n结构与类共享大多数相同的语法。但结构是值类型,类是引用类型,且结构不支持继承。471.2.2 数据类型n值类型值类型结构类型结构类型【例1-4】结构与类的比较(即值类型与引用类型的比较)。public struct MyStruct public int a;public void Output()Console.Wri
24、teLine(结构成员 a=0,a);class Program static void Main()MyStruct x;x.a=100;x.Output();481.2.2 数据类型n引用类型引用类型n和值类型相比,引用类型不存储它们所代表的实际数据,但它们存储实际数据的地址(引用)。n引用类型包括:object、string、数组、类、接口、委托等。其内容在后续的章节中介绍。nobject类是.net 类型层次结构的根,所有类型(用户定义类型、引用类型和值类型)均是直接或间接从 object 继承的。因为它是所有类型的基类,所以可把任何类型的值赋给它,例如:object theObj=1
25、23;即:装箱(值类型 Object类型)拆箱(Object类型 值类型)491.2.3 数据类型转换n分为:隐式转换和显式转换隐式转换和显式转换n隐式转换:系统默认,不需要加以说明。需要注意的是:n字符类型:可以隐式转换为整型或浮点型,但不存在其他类型到字符类型的隐式转换。n数值类型:低精度类型可以隐式转换为高精度类型,反之会出现异常。n在浮点型和decimal类型之间不存在隐式转换,因此,这两种类型之间必须使用显示转换。ushort destinationVar;char sourceVar=a;destinationVar=sourceVar;Console.WriteLine(sour
26、ceVar val:+sourceVar);Console.WriteLine(destinationVar val:+destinationVar);501.2.3 数据类型转换n隐式转换隐式转换511.2.3 数据类型转换n显式转换显式转换:即强制转换,需要指定要转换到的类型。n方法一:(类型名称)变量名称;注:如不强制转换则程序出现编译错误。double x=1234.7;int a;/Cast double to int.a=(int)x;System.Console.WriteLine(a);521.2.3 数据类型转换n显式转换显式转换n方法一:(类型名称)变量名称;int sou
27、rceVar=7;byte targetVar;targetVar=(byte)sourceVar;Console.WriteLine(32位有符号整数:0,sourceVar);Console.WriteLine(8位无符号整数:0,targetVar);531.2.3 数据类型转换n显式转换显式转换n方法一:(类型名称)变量名称;n此时出现溢出现象,可采用checked(expression)检查。int sourceVar=281;byte targetVar;targetVar=(byte)sourceVar;Console.WriteLine(32位有符号整数:0,sourceVar
28、);Console.WriteLine(8位无符号整数:0,targetVar);541.2.3 数据类型转换n显式转换显式转换n方法二:使用System.Convert类,可以检查溢出。55【例1-5】float a=15.5f;int b=(int)a;/截断double c=a;int d=Convert.ToInt32(a);/四舍五入Console.WriteLine(“转换类型前变量 a 的值为:0,a);Console.WriteLine(显式转换为 int 类型后的值为:0,b);Console.WriteLine(隐式转换为 double 类型后的值为:0,c);Consol
29、e.WriteLine(使用Convert类ToInt32方法转换int类型后的值为:0,d);char e=a;byte f=Convert.ToByte(e);Console.WriteLine(字符a使用Convert类ToByte方法转换为byte类型的值为:0,f);string value=“124”;/Convert可以转换字符串为数值型Console.WriteLine(字符串124使用Convert类ToInt32方法转换为int类型的值为:0,Convert.ToInt32(value);1.2.3 数据类型转换561.2.4 常量和变量n符号常量n变量命名规范nHunga
30、rian notation(匈牙利命名法):在组成变量的单词前,加上小写字母、下划线作为前缀,以识别变量的作用域、类型等。如:m_strLastName(表示类的成员变量)strLastName(表示函数内的局部变量)ncamelCase(骆驼命名法):组成变量的单词中,除第一个单词首字母小写外,其余单词首字母大写。如:lastNamenPascalCase(帕斯卡命名法):组成变量的每个单词的首字母大写。如:LastNamenMicrosoft建议:简单变量使用camelCase,函数等使用PascalCase。const int speedLimit=55;const double pi=
31、3.14159265358979323846264338327950;571.2.5 装箱与拆箱n装箱(boxing):装箱是值类型到 object 类型或到某一引用类型的隐式转换。对值类型进行装箱会在堆栈中创建对象变量,并将该值复制到对象变量指向的堆中。int i=123;object o=(object)i;/boxing 581.2.5 装箱与拆箱n装箱(boxing):装箱是值类型到 object 类型或到某一引用类型的隐式转换。对值类型进行装箱会在堆栈中创建对象变量,并将该值复制到对象变量指向的堆中。class TestBoxing static void Main()int i=1
32、23;object o=i;/Implicit boxing i=456;/Change the contents of i System.Console.WriteLine(The value-type value=0,i);System.Console.WriteLine(The object-type value=0,o);/*Output:The value-type value=456 The object-type value=123*/591.2.5 装箱与拆箱n拆箱(unboxing):是从 object 类型或某一引用类型到值类型的显式转换。操作包括:n检查对象变量,以确保其
33、指向的装箱值是需转换的值类型.n将该值从对象变量中复制到值类型变量中。int i=123;/a value type object o=i;/boxing int j=(int)o;/unboxing 601.2.6 运算符n根据运算类型,常用运算符可以分为以下几类:n算术运算符n赋值运算符n关系运算符n逻辑运算符n位运算符611.2.6 运算符n算术运算符621.2.6 运算符n赋值、复合赋值运算符631.2.6 运算符n关系运算符641.2.6 运算符n逻辑运算符651.2.6 运算符n位运算符(二进制运算)【例1-6】运算符说明&按位与:对应位均为1时,则结果为1;否则为0|按位或:对应
34、位只要有1,则结果为1;否则为0 按位异或:对应位值不同时,则结果为1;否则为0int x=4,y=5,z;z=x&y;z=x|y;z=x y;661.2.6 运算符n运算符优先级671.3 控制语句n分支结构nifelse语句nswitch语句n循环结构nwhile语句ndowhile语句nfor语句nforeach语句681.3.1 分支结构nifelse语句if(result=true)Console.WriteLine(The variable is set to true.);else Console.WriteLine(The variable is set to false.);
35、if(x 10)if(y 20)Console.Write(Statement_1);else Console.Write(Statement_2);if(Condition_1)/Statement_1;else if(Condition_2)/Statement_2;else if(Condition_3)/Statement_3;else /Statement_n;691.3.1 分支结构nswitch语句int caseSwitch=1;/输入caseSwitch switch(caseSwitch)case 1:Console.WriteLine(Case 1);break;case
36、 2:Console.WriteLine(Case 2);break;default:Console.WriteLine(Default case);break;int n;/输入n值switch(n)case 1:case 2:case 3:Console.WriteLine(Its 1,2,or 3.);break;default:Console.WriteLine(Not sure what it is.);break;701.3.2 循环结构nwhile语句ndowhile语句int n=1;while(n 6)Console.WriteLine(Current value of n
37、is 0,n);n+;int x=0;do Console.WriteLine(x);x+;while(x 5);711.3.2 循环结构nfor语句for(初始值;循环条件;更新值)循环体 for(int i=1;i 10;i+)for(int j=1;j=i;j+)Console.Write(0*1=2,-2,i,j,i*j);/-2是占位符 Console.WriteLine();721.3.2 循环结构nforeach语句n用于集合类元素的枚举,如数组、字符串、列表、队列、堆栈等。foreach(数据类型 变量 in 集合表达式)循环体;n主要用于元素值的读,不建议用于元素值的更改以避
38、免产生不可预知的副作用。731.3.2 循环结构nforeach语句int fibarray=new int 0,1,2,3,5,8,13;foreach(int i in fibarray)System.Console.WriteLine(i);string S=欢迎光临青岛;foreach(char a in S)System.Console.WriteLine(a);for(int i=0;i S.Length;i+)System.Console.WriteLine(Si);741.3.2 循环结构n循环终止语句nbreak语句 用于终止所在循环或所在的 switch 语句。nconti
39、nue语句 用于终止本次循环,开始下一次循环。751.4 数组n按照数组的维数,数组可分为三类:n一维数组n多维数组n交错数组761.4.1 一维数组n声明方法:数据类型 数组名;注:数组为引用类型,在使用前必须先分配空间。n可以在声明数组时进行初始化:或初始化的简化形式:int array=new int5;string stringArray=new string6;int array=new int 1,3,5,7,9;string weekDays=new string Sun,Mon,Tue,Wed,Thu,Fri,Sat;int array=1,3,5,7,9;string wee
40、kDays=Sun,Mon,Tue,Wed,Thu,Fri,Sat;771.4.1 一维数组n可以在声明数组变量时不为其分配空间,当在程序中将数组分配给此变量时必须使用 new 运算符。int array;string weekDays;array=new int 1,3,5,7,9;/OK/array2=1,3,5,7,9;/Error weekDays=new string Sun,Mon,Tue,Wed,Thu,Fri,Sat;781.4.1 一维数组n数组元素的遍历nfor形式for(int i=0;i数组名.length;i+)/can use 数组名i for each eleme
41、ntnforeach形式foreach(类型 变量 in 数组名)/can use 变量 for each element791.4.2 多维数组n声明:n声明时初始化:n如果声明一个数组变量时不为其分配空间,必须使用 new 运算符将一个数组分配给此变量:int,array=new int4,2;int,array1=new int2,2,3;int,array2D=new int,1,2,3,4,5,6,7,8 ;int,array3D=new int,1,2,3,4,5,6 ,7,8,9,10,11,12 ;int,array5;array5=new int,1,2,3,4,5,6,7,
42、8 ;/OK/array5=1,2,3,4,5,6,7,8;/Error 801.4.2 多维数组nArray类的常用方法、属性n使用方法:数组名.方法名()、数组名.属性名811.4.3 交错数组n交错数组:也称为“数组的数组”,交错数组是一维数组,且每个元素自身又是一个一维数组。作为元素的数组无需为相同的大小。n声明 或n还需给各元素分配空间 或同时赋初值int jaggedArray=new int3;int jaggedArray;jagged=new int3;jaggedArray0=new int5;jaggedArray1=new int4;jaggedArray2=new i
43、nt2;jaggedArray0=new int 1,3,5,7,9;jaggedArray1=new int 0,2,4,6;jaggedArray2=new int 11,22;int jaggedArray=new int34;831.4.3 交错数组/Declare the array of two elements:int arr=new int2;/Initialize the elements:arr0=new int5 1,3,5,7,9;arr1=new int4 2,4,6,8;/Display the array elements:for(int i=0;i arr.Le
44、ngth;i+)System.Console.Write(Element(0):,i);for(int j=0;j arri.Length;j+)System.Console.Write(0,arrij);System.Console.WriteLine();841.5 异常处理n程序存在两类错误:n编译错误(build error)n错误列表窗口n调试工具(Debug)n运行错误(runtime error):称为异常(exception)n编译时无法预期的错误,如数组越界、被 0 除等。nTryCatchFinally结构851.5 异常处理n调试方法n设置断点(Break Point)、
45、逐句跟踪、值跟踪(局部变量窗口、监视窗口)n“局部变量”窗口:显示当前函数的局部变量n“监视”窗口:自定义要监视的内容n信息输出n控制台输出:Console.Writeline();nDebug的“输出”窗口:System.Diagnostics.Debug.Writeline();nMessageBox.Show();861.5 异常处理nTryCatchFinally结构n将可能有异常的代码放入Try块中,并用Catch块捕捉和处理异常,Finally块放入相关的后处理代码。ntry 块必须与 catch 或 finally 块一起使用,并且可以有多个 catch 块。try /Code
46、to try here.catch(SomeSpecificException ex)/Code to handle exception here.finally /Code to execute /after try(and possibly catch)here.try /Code to try here.catch(SomeSpecificException ex)/Code to handle exception here.try /Code to try here.finally /Code to execute after try here.871.5 异常处理nTryCatchF
47、inally 结构static void Main()/Input for test purposes.Change values /to see exception handling behavior.int a=new 10,20,30,40;try a4=50;Console.WriteLine(元素值=0,a4);catch(IndexOutOfRangeException e)Console.WriteLine(“数组越界.);/Console.WriteLine(e.Message);881.5 异常处理nTryCatchFinally 结构执行过程:n当 try 块中代码发生异常
48、时停止执行。n若存在 catch 块,则检查相应的异常类型是否匹配;如果没有 catch 块,则直接执行 finally 块。n若存在多个 catch 块,则依次检查各异常类型是否匹配。n若某个 catch 块匹配了异常类型,则执行其包含的代码;再执行 finally 块。n若没有匹配的 catch 块,而 finally 块存在,则执行 finally 块代码。n多个 catch 块的匹配顺序是从顶部到底部,但是,只执行最匹配的一个 catch 块。如果没有与任一指定异常类型的 catch 块相匹配,则执行不带异常类型的 catch 块(如果有的话)。因此应将最具体异常类型的 catch 块
49、放在最前面。891.5 异常处理nTryCatchFinally 结构static void Main()System.IO.StreamWriter sw=null;try sw=new System.IO.StreamWriter(“D:test.txt);sw.WriteLine(Hello);catch(System.IO.FileNotFoundException ex)/put the more specific exception first System.Console.WriteLine(ex.Messgae);catch(System.IO.IOException ex)/then,put the less specific exceptions System.Console.WriteLine(ex.Message);catch(System.Exception ex)/put the most common exception last System.Console.WriteLine(ex.Message);finally sw.Close();/各块必须有括号,即使只有一条语句各块必须有括号,即使只有一条语句 结束结束
限制150内