第二十章 异常和状态管理

目录:

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

时间: 2024-10-10 12:06:58

第二十章 异常和状态管理的相关文章

第二十章 内存等空间管理类的实现

                   第二十章   内存等空间管理类的实现      空间.时间对我来说,或许永远是一个迷.即使我曾经深入到原子的最深处,即使人类科学家是自欺欺人,即使我了解到的最深层次的部分真理是正确的:那又能怎样?那都是过去式,在那光明与黑暗一体之地.我的灵魂受伤了:我不得不回到电脑这块充满垃圾的地方修心养性. 或许我的论述方法不好,要完全理解本章是有点难度:你要对简单的空间概念需要一定的理解,即使只是论述1D的线性平面空间中的2个基本方法:分配与释放,但也很复杂.要知道LI

对CLR异常和状态管理的一点理解

一:自己的感悟 今天读到<CLR via C#>的异常和状态管理这一章,作者给出了关于异常处理的诸多建议,里面有一些建议自己深有体会,比如说使用可靠性换取开发效率这一节.之前自己对异常怎么处理也有过自己的思考,归纳了一下主要有以下几点: 1.不要什么异常都捕捉,只有在自己不确定这段代码会不会有问题时才去捕捉异常,大部分的异常应该在开发测试阶段就消灭 2.异常在没有发生时异常对程序的效率没什么影响,一旦发生异常程序的效率的就会下降好几倍 以上就是自己在写程序时对异常的处理,虽然比较了解.NET的

异常和状态管理1

异常是指成员没有完成它的名称所宣称的行动. 如 FileStream 的 方法里有 Read,Write,等等(行动成员通常用动词表示).当行动成员不能完成任务时,就应抛出异常. try: 如果代码需要执行一般性的资源清理操作,需要从异常中恢复,或者两者都需要,就可以放到 try 块中.负责清理的代码应该放到一个 finally 块中.try 块还可包含也许会抛出异常的代码.负责异常恢复的代码应放到一个或多个 catch 块中.针对应用程序能从中安全恢复的每一种异常,都应该创建一个 catch

异常和状态管理

一.异常处理机制 1,应该在try中放置多少代码?取决于状态管理.如果在一个try块中执行多个可能抛出同一个异常类型的操作,但不同的操作有不同的异常恢复措施,则应该将每个操作都放到他自己的try块中,这样才能正确地恢复状态2,try.finally,catch执行顺序 try { try { throw new Exception("异常"); } finally { Console.WriteLine("finally"); } } catch { Console

第20章 异常和状态管理20.7-20.13

20.7用可靠性换取开发效率 面向对象编程,编译器功能,CLR功能以及庞大的类库——使.Net Framework成为一个颇具吸引力的开发平台.但所有的这些东西,都会在你的代码中引入你没有什么控制权的“错误点”,如果 OutOfMemoryExcepton等.程序开发不可能对这些异常进行一一捕捉,让应用程序变得绝对健壮.意料意外的异常往往造成程序状态的破坏,为 了缓解对状态的破坏,可以做下面几件事: ●执行catch或finally块时,CLR不允许终止线程,所以可以向下面这样写是Transfe

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

异常就是指成员没有完成它的名称所宣示的行动. public class Girl { public string Name { get; set; } } public class Troy{ Girl girl; public void Love() { Console.WriteLine("Troy爱上了" + girl.Name); } } 上面这段代码会有异常,因为Troy去执行Love这个函数,然而其中girl根本就没有赋值.本来Troy预期完成爱一个姑娘这个行动,结果发生了

读书笔记—CLR via C#异常和状态管理

前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可以加深自己理解的深度,当然同时也和技术社区的朋友们共享 Tips vs调试catch块时,监视窗口变量: $exception 查看当前抛出的异常对象 异常的catch是自上而下,回溯调用栈,如果未找到,就抛出未处理异常 异常的执行顺序:先执行body,再执行catch,最后执行finally 堆栈

20、异常和状态管理

namespace CLR_Via { class Class4 { static void Main() { DiskFullException.TestException(); Console.ReadKey(); } } [Serializable] public sealed class DiskFullException : ExceptionArgs { private readonly string m_diskPath; public DiskFullException(stri

第二章 状态管理和绘制几何物体 总结

目标 1. 清除窗口 2.强制完成所有尚未执行的绘图操作 3.在2d或3d空间绘制图元 4.打开.关闭.查询状态 5.控制图元显示 6.在实心物体表面适当位置指定法线向量 7.用顶点数组和缓冲区对象存储和访问几何数据. 8.同时保存和恢复几个状态变量. 1.1 3种基本操作:清除窗口.绘制几何图形.绘制光栅对象. 2. 绘图工具箱: 2.1 清除RGBA模式的窗口 glClearColor(R, G, B, A); //将当前清除颜色设置成为一个状态变量 glClearDepth(1.0); /