目录:
20.1 定义“异常”
20.2 异常处理机制
20.3 System.Exception类
20.4 FCL定义的异常类
20.5 定义自己的异常类
20.6 用可靠性换取开发效率
20.7 设计规范和最佳实践
20.8 未处理的异常
20.9 异常处理的性能问题
20.10 约束执行区域(CLR)
20.11 代码协定
20.1 定义“异常”
异常指成员没有完成它的名称所宣称的行动。
20.2 异常处理机制
通过异常处理返回错误报告。
2.1 try块:如果代码需要执行一般性的资源清理操作,需要从异常中恢复,或者两者都需要,就可以放到try块中。负责清理的代码应放到一个finally块中。try块还可包含也许会抛出异常的代码。负责异常恢复的代码应放到一个或多个catch块中。
2.2 catch块:catch块包含的是响应一个异常需要执行的代码。catch关键字后的圆括号中的表达式称为捕捉类型。C#要求捕捉类型必须是System.Exception或者它的派生类型。
在catch块末尾,有三种选择:
1.从新抛出相同的异常,向调用栈高一层的代码通知该异常的发生。
2.抛出一个不同的异常,向调用栈高一层的代码提供更丰富的异常信息。
3.让线程从catch块的底部退出。
2.3 finally块:finally块包含的是保证会执行的代码。一般在finally块中执行try块的行动所要求的资源清理操作。
20.3 System.Exception类
CLR允许异常抛出任何类型的实例——从Int32到String都可以。但是,Microsoft决定部强迫所有编程语言都抛出和捕捉任意类型的异常。因此,他们定义了System.Exception类型,并规定所有CLS相容的编程语言都必须能抛出和捕捉派生自该类型的异常。
属性名称 | 访问 | 类型 | 说明 |
Message | 只读 | String | 包含辅助性文字说明,指出抛出异常的原因。 |
Data | 只读 | IDictionary | 引入一个“键/值对”集合。通常,代码在抛出异常前在该程序集合中添加记录项;捕捉异常的代码可在异常恢复中查询记录项并利用其中的信息。 |
Source | 读/写 | String | 包含生成异常的程序集的名称 |
StackTrace | 只读 | String | 包含抛出异常之前调用过的所有方法的名称和签名,该属性对调试很有用。 |
TargetSite | 只读 | String | 包含抛出异常的方法 |
HelpLink | 只读 | String | 包含帮助用户理解异常的一个文档的URL |
InnerException | 只读 | Exception | 如果当前异常是在处理一个异常时抛出的,该属性就指出上一个异常时什么。 |
HResult | 读/写 | Int32 | 跨越托管和本机代码边界时使用的一个32位值。 |
抛出异常时,CLR会重置异常起点;也就是说,CLR只记录最新的异常对象抛出位置。
20.4 FCL定义的异常类
20.5 定义自己的异常类
实现自己得方法时,如果方法无法完成方法名所指明得任务,就应抛出一个异常。
20.6 用可靠性换取开发效率
20.7 设计规范和最佳实践
20.8 未处理的异常
20.9 异常处理的性能问题
20.10 约束执行区域(CLR)
20.11 代码协定
原文地址:https://www.cnblogs.com/terry-1/p/10396985.html