.NET框架程序设计(修订版)-- 笔记(五)
第Ⅴ部分 类型管理
第十八章 异常
异常处理带来的好处:
① 利用异常处理,我们可以将资源清理代码放在一个固定的位置,并且确保它们得到执行。
② 利用异常处理,我们可以将处理异常的代码放在一个集中的位置。
③ 利用异常处理,我们可以很容易定位和修复代码中的BUG。
18.1异常处理的演化
18.2异常处理机制
包含的通常是一些需要资源清理或者异常恢复的操作,可能会抛出异常的代码。单独一个try块没有任何意义。
包含的是出现异常时需要执行的响应代码。如果try块没有抛出异常将不会执行。出现在catch关键字后的表达式被称作异常筛选器(exception fukter),表示开发人员预料到的、并且可以从中恢复的一种异常情况,必须是System.Exception或其子类。多个catch是自上而下搜索的。在finally之后才会执行finally块的代码,有三种选择:①重新抛出所捕获的异常。②抛出一个不同的异常。③让线程从catch块的底部退出。
一般是执行资源清理工作。
18.3异常的本质
异常是对程序接口隐含假设的一种违反。
18.4System.Exception类
P.407表17.1System.Exception类型的属性
18.5FCL定义的异常类
P.408-P.409
18.6定义自己的异常类
应该是可序列化的,并实现及调用父类的公有构造参数。
18.7如何正确使用异常
使用lock和using语句,使编译器自动产生try块和finally块。
18.8FCL中存在的一些问题
18.9性能考虑
18.10捕获筛选器
捕获筛选器就是一个数据类型,会判断抛出的异常类型是否和筛选器指定的类型相匹配。CLR支持复杂的筛选器,但许多语言不支持。CLR会先查找接受被抛出异常的捕获筛选器,然后调用更低层次的堆栈中的Finally块来展开调用堆栈,最后才会执行匹配的catch中的代码。
18.11未处理异常
18.12异常堆栈踪迹
18.13异常调试
第十九章 自动内存管理(垃圾收集)
19.1垃圾收集平台基本原理解析
访问一个资源的步骤:
① 调用中间语言(IL)中的newobj指令,为某个特定资源的类型实例分配内存空间。
② 初始化上一步所得的内存。
③ 通过访问类型成员来使用资源。
④ 销毁资源状态。
⑤ 释放内存。
19.2垃圾收集算法
19.3终止化操作
尽量避免使用Finalize方法,增加内存压力,分配时间较长,损伤应用程序性能,可能引用其他对象延长他们的生存期,无法很好控制Finalize方法何时执行,CLR不对Finalize方法的执行顺序做任何保证。
①第0代对象充满
②显示调用System.GC的静态方法Collect
③CLR卸载应用程序域
④CLR被关闭
19.4Dispose模式:强制对象清理资源
19.5弱引用
19.6对象复苏
19.7对象的代龄
19.8编程控制垃圾收集器
19.9其他一些与垃圾收集器性能相关的问题
19.10监视垃圾收集
第二十章 CLR寄宿、应用程序域、反射
20.1元数据:.NET框架的基石
20.2CLR寄宿
任何Windows应用程序都可以寄宿CLR。
20.3应用程序域
是一组程序集的一个逻辑容器。特点:
① 应用程序域之间是相互隔离的。
② 引用程序域可以被卸载。
③ 应用程序域可以单独实施安全策略和配置策略。
包括:ApplicationName,ApplicationBase,PrivateBinPath,ConfiguationFile,LoaderOptimization
20.4反射概要
20.5反射一个程序集中的类型
20.6反射一个应用程序域中的程序集
20.7反射一个类型的成员:绑定
20.8显式加载程序集
20.9显式卸载程序集:卸载应用程序域
20.10获取一个System.Type对象的引用
20.11反射一个类型的成员
20.12反射一个类型的接口
20.13反射的性能
避免使用反射来访问类型成员,访问速度较慢,动态的定位及构造类型请遵循:
① 让类型继承自一个编译时已经确定的基类型。
② 让类型实现一个编译时已经确定的接口类型。