第二十章 异常和状态管理

Posted terry-1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二十章 异常和状态管理相关的知识,希望对你有一定的参考价值。

目录:

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 代码协定

 

以上是关于第二十章 异常和状态管理的主要内容,如果未能解决你的问题,请参考以下文章

第二十章 无状态Web应用集成——《跟我学Shiro》

C#进阶系列19 异常和状态管理

20异常和状态管理

异常和状态管理1

Flutter状态管理终极方案GetX第二篇——状态管理

异常和状态管理2