异常处理:构建稳定可靠的代码
1. 异常处理基础
在编程中,异常是指程序执行过程中出现的意外情况,如方法调用失败或对象状态无效等。通用语言运行时(CLR)对异常提供了强大的支持。当遇到异常情况,代码无法继续执行时,我们可以创建并抛出异常。一旦异常被抛出,CLR会开始逐帧展开调用栈,清理每个栈帧中的局部对象。如果栈帧中注册了针对该异常类型的处理程序,CLR会调用该处理程序来解决问题;若栈展开结束仍未找到处理程序,当前应用程序域的未处理异常事件可能会被触发,应用程序可能会中止。
编写异常安全的代码并非易事。不能简单地认为编写异常安全代码只是在出错时抛出异常并在某处捕获它们。实际上,异常安全的编码技术旨在确保系统在面对异常时的完整性。作为程序员,我们要确保在栈展开时,对象状态的完整性不受影响,这才是异常安全编码技术的核心。
2. 异常处理位置
应该在哪里处理异常呢?可以运用专家模式的变体来确定。简单来说,就是在有足够知识和能力解决问题的地方捕获异常。有时,捕获异常的代码可能靠近异常产生的位置,捕获异常后进行纠正操作,使程序继续正常执行;有时,唯一合理的捕获位置是入口点 Main 方法,此时可以在提供有用数据后中止进程,或者重置进程,就像应用程序刚刚重启一样。关键在于找出从异常中恢复的最佳方式以及最合适的处理位置。
3. 避免使用异常控制流程
在复杂方法中使用异常来控制执行流程可能很有吸引力,但这通常不是一个好主意。异常的生成和处理成本较高,如果在应用程序核心方法中使用异常控制流程,性能可能会下降。此外,这也降低了异常的本质意义,异常的目的是清晰地指示异常情况并进行处理或报告。
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



