当一个异常发生时,CLR:

创建该类型的异常对象

寻找适当的catch子句处理它

所有的异常都从根本上派生自system.exception类,异常对象含有只读属性,带有导致该异常的信息clipboard

原则 :

正常的业务流程不应该使用异常来处理.

不要总是尝试去捕获异常或引发异常,而应该允许异常向调用堆栈往上传播

使用异常的情况:

第一类情况 :如果运行代码后会造成内存泄漏,资源不可用,或者应用程序状态不可恢复,则会引发异常(在对可控范围内的输入和输出不引发异常)

第二类情况 :在捕获异常的时候,如果需要包装一些更有用的信息,则引发异常.

第三类情况 : 如果底层异常在高层操作的上下文中没有意义,则可以考虑捕获这些底层异常,并引发新的有意义的异常.

finally的语言特性决定了资源释放的最佳位置是在finally块中,finallyzing是先于return执行

而且finally不会因为调用堆栈中存在的异常而被终止, CLR会先执行catch块,然后再执行finally块.