首页 C#异常16

C#异常16

举报
开通vip

C#异常16异常 295 16.1 导致异常的原因 295 16.2 System.Exception 类 295 16.3 异常的处理方式 296 16.4 公共异常类 296 1. 异常 C# 中的异常用于处理系统级和应用程序级的错误状态,它是一种结构化的、统一的和类型安全的处理机制。C# 中的异常机制非常类似于 C++ 的异常机制,但是有一些重要的区别: · 在 C# 中,所有的异常必须由从 System.Exception 派生的类类型的实例来表示。在 C++ 中,可以使用任何类型的任何值表示异常。 · 在 C# 中,...

C#异常16
异常 295 16.1 导致异常的原因 295 16.2 System.Exception 类 295 16.3 异常的处理方式 296 16.4 公共异常类 296 1. 异常 C# 中的异常用于处理系统级和应用程序级的错误状态,它是一种结构化的、统一的和类型安全的处理机制。C# 中的异常机制非常类似于 C++ 的异常机制,但是有一些重要的区别: · 在 C# 中,所有的异常必须由从 System.Exception 派生的类类型的实例来表示。在 C++ 中,可以使用任何类型的任何值表示异常。 · 在 C# 中,利用 finally 块(第 8.10 节)可编写在正常执行和异常情况下都将执行的终止代码。在 C++ 中,很难在不重复代码的情况下编写这样的代码。 · 在 C# 中,系统级的异常如溢出、被零除和 null 等都对应地定义了与其匹配的异常类,并且与应用程序级的错误状态处于同等地位。 1.1 导致异常的原因 可以以两种不同的方式引发异常。 · throw 语句(第 8.9.5 节)用于立即无条件地引发异常。控制永远不会到达紧跟在 throw 后面的语句。 · 在执行 C# 语句和表达式的过程中,有时会出现一些例外情况,使某些操作无法正常完成,此时就会引发一个异常。例如,整数除法运算(第 7.7.2 节)中,如果分母为零,则会引发 System.DivideByZeroException。有关可能以此方式引发的各种异常的列表,请参见第 16.4 节。 1.2 System.Exception 类 System.Exception 类是所有异常的基类型。此类具有一些所有异常共享的值得注意的属性: · Message 是 string 类型的一个只读属性,它包含关于所发生异常的原因的描述(易于人工阅读)。 · InnerException 是 Exception 类型的一个只读属性。如果它的值不是 null,则它所引用的是导致了当前异常的那个异常,即表示当前异常是在处理那个 InnerException 的 catch 块中被引发的。否则,它的值为 null,则表示该异常不是由另一个异常引发的。以这种方式链接在一起的异常对象的数目可以是任意的。 这些属性的值可以在调用 System.Exception 的实例构造函数时指定。 1.3 异常的处理方式 异常是由 try 语句(第 8.10 节)处理的。 发生异常时,系统将搜索可以处理该异常的最近的 catch 子句(根据该异常的运行时类型来确定)。首先,搜索当前的方法以查找一个词法上包含着它的 try 语句,并按顺序考察与该 try 语句相关联的各个 catch 子句。如果上述操作失败,则在调用了当前方法的方法中,搜索在词法上包含着当前方法调用代码位置的 try 语句。此搜索将一直进行下去,直到找到可以处理当前异常的 catch 子句(该子句指定一个异常类,它与当前引发该异常的运行时类型属于同一个类或是该运行时类型所属类的一个基类)。注意,没有指定异常类的 catch 子句可以处理任何异常。 找到匹配的 catch 子句后,系统将把控制转移到该 catch 子句的第一条语句。在 catch 子句的执行开始前,系统将首先按顺序执行嵌套在捕捉到该异常的 try 语句里面的所有 try 语句所对应的全部 finally 子句。 如果没有找到匹配的 catch 子句,则发生下列两种情况之一: · 如果对匹配的 catch 子句的搜索到达一个静态构造函数(第 10.11 节)或静态字段初始值设定项,则在导致调用该静态构造函数的代码位置引发 System.TypeInitializationException。该 System.TypeInitializationException 的内部异常将包含最初引发的异常。 · 如果对匹配的 catch 子句的搜索到达最初启动当前线程的代码处,则该线程的执行就会终止。此类终止会产生什么影响,应由实现来定义。 特别值得注意的是在析构函数执行过程中发生的异常。如果在析构函数执行过程中发生异常且该异常未被捕获,则将终止该析构函数的执行,并调用它的基类的析构函数(如果有)。如果没有基类(如 object 类型中的情况),或者如果没有基类析构函数,则该异常将被忽略。 1.4 公共异常类 下列异常由某些 C# 操作引发。 System.ArithmeticException 在算术运算期间发生的异常(如 System.DivideByZeroException 和 System.OverflowException)的基类。 System.ArrayTypeMismatchException 当存储一个数组时,如果由于被存储的元素的实际类型与数组的实际类型不兼容而导致存储失败,就会引发此异常。 System.DivideByZeroException 在试图用零除整数值时引发。 System.IndexOutOfRangeException 在试图使用小于零或超出数组界限的下标索引数组时引发。 System.InvalidCastException 当从基类型或接口到派生类型的显式转换在运行时失败时,就会引发此异常。 System.NullReferenceException 在需要使用引用对象的场合,如果使用 null 引用,就会引发此异常。 System.OutOfMemoryException 在分配内存(通过 new)的尝试失败时引发。 System.OverflowException 在 checked 上下文中的算术运算溢出时引发。 System.StackOverflowException 当执行堆栈由于保存了太多挂起的方法调用而耗尽时,就会引发此异常;这通常表明存在非常深或无限的递归。 System.TypeInitializationException 在静态构造函数引发异常并且没有可以捕捉到它的 catch 子句时引发。
本文档为【C#异常16】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_154809
暂无简介~
格式:doc
大小:48KB
软件:Word
页数:0
分类:互联网
上传时间:2012-11-03
浏览量:14