- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.4公共异常类-Read.doc
异常 PAGEREF _Toc113945889 \h 295
16.1 导致异常的原因 PAGEREF _Toc113945890 \h 295
16.2 System.Exception 类 PAGEREF _Toc113945891 \h 295
16.3 异常的处理方式 PAGEREF _Toc113945892 \h 296
16.4 公共异常类 PAGEREF _Toc113945893 \h 296
异常
C# 中的异常用于处理系统级和应用程序级的错误状态,它是一种结构化的、统一的和类型安全的处理机制。C# 中的异常机制非常类似于 C++ 的异常机制,但是有一些重要的区别:
在 C# 中,所有的异常必须由从 System.Exception 派生的类类型的实例来表示。在 C++ 中,可以使用任何类型的任何值表示异常。
在 C# 中,利用 finally 块(第 REF _Ref486414635 \r \h \* MERGEFORMAT 8.10 节)可编写在正常执行和异常情况下都将执行的终止代码。在 C++ 中,很难在不重复代码的情况???编写这样的代码。
在 C# 中,系统级的异常如溢出、被零除和 null 等都对应地定义了与其匹配的异常类,并且与应用程序级的错误状态处于同等地位。
导致异常的原因
可以以两种不同的方式引发异常。
throw 语句(第 REF _Ref486414653 \r \h \* MERGEFORMAT 8.9.5 节)用于立即无条件地引发异常。控制永远不会到达紧跟在 throw 后面的语句。
在执行 C# 语句和表达式的过程中,有时会出现一些例外情况,使某些操作无法正常完成,此时就会引发一个异常。例如,整数除法运算(第 REF _Ref486414684 \r \h \* MERGEFORMAT 7.7.2 节)中,如果分母为零,则会引发 System.DivideByZeroException。有关可能以此方式引发的各种异常的列表,请参见第 REF _Ref486144916 \r \h \* MERGEFORMAT 16.4 节。
System.Exception 类
System.Exception 类是所有异常的基类型。此类具有一些所有异常共享的值得注意的属性:
Message 是 string 类型的一个只读属性,它包含关于所发生异常的原因的描述(易于人工阅读)。
InnerException 是 Exception 类型的一个只读属性。如果它的值不是 null,则它所引用的是导致了当前异常的那个异常,即表示当前异常是在处理那个 InnerException 的 catch 块中被引发的。否则,它的值为 null,则表示该异常不是由另一个异常引发的。以这种方式链接在一起的异常对象的数目可以是任意的。
这些属性的值可以在调用 System.Exception 的实例构造函数时指定。
异常的处理方式
异常是由 try 语句(第 REF _Ref486767569 \r \h \* MERGEFORMAT 8.10 节)处理的。
发生异常时,系统将搜索可以处理该异常的最近的 catch 子句(根据该异常的运行时类型来确定)。首先,搜索当前的方法以查找一个词法上包含着它的 try 语句,并按顺序考察与该 try 语句相关联的各个 catch 子句。如果上述操作失败,则在调用了当前方法的方法中,搜索在词法上包含着当前方法调用代码位置的 try 语句。此搜索将一直进行下去,直到找到可以处理当前异常的 catch 子句(该子句指定一个异常类,它与当前引发该异常的运行时类型属于同一个类或是该运行时类型所属类的一个基类)。注意,没有指定异常类的 catch 子句可以处理任何异常。
找到匹配的 catch 子句后,系统将把控制转移到该 catch 子句的第一条语句。在 catch 子句的执行开始前,系统将首先按顺序执行嵌套在捕捉到该异常的 try 语句里面的所有 try 语句所对应的全部 finally 子句。
如果没有找到匹配的 catch 子句,则发生下列两种情况之一:
如果对匹配的 catch 子句的搜索到达一个静态构造函数(第 REF _Ref486414759 \r \h \* MERGEFORMAT 10.11 节)或静态字段初始值设定项,则在导致调用该静态构造函数的代码位置引发 System.TypeInitializationException。该 System.TypeInitializationException 的内部异常将包含最初引发的异常。
如果对匹配的 cat
您可能关注的文档
- (84Kb).doc-彰化县政府-政风处.doc
- (95年度)制程资料申请须知与说明-国家晶片系统设计中心.ppt
- (台北院区)废弃物分类一览表修订日期96-马偕纪念医院.doc
- (教师类-2017).-武汉理工大学自主创新基金项目管理系统.doc
- (服装表演方向)考试大纲.doc
- (解决系统在win7和Vista上及IE8中使用的问题).ppt.ppt
- +关于普通高等学校硕士研究生自然辩证法概论-高等教育出版社立体.doc
- 0.19M-成功大学材料系.ppt
- 00.Unity3D脚本中文参考.doc.doc
- 00896电子商务.doc.doc
- 1.LDAP协议基础概念.doc
- 1.上海市2015年10-11月流通环节肉及肉制品监督抽检情况.doc-上海奉贤.doc
- 1.为何生质柴油大多使用甲醇制造而不用乙醇.doc
- 1.写参考书目的架构介绍(参考书目公式).2.以实际例子-长庚大学图书馆.ppt
- 1.写参考书目的架构介绍(参考书目公式).2.以实际例子让学生知道在那里.ppt
- 1.噪声大问题解决方案.ppt
- 1.新一代美国科学教育标准导读.p-拱墅区教育局.ppt
- 1.有机污泥减量与再利用-桃园市大学校院产业环保技术服务团首页.ppt
- 1.桩基检测方案(计划).doc
- 1.程序约定1.1排版规则1)程序应采用缩进风格编写,每层缩进以4个.doc
文档评论(0)