C#面试题更新 2026-08-03

请解释 .NET 中的公共语言运行时(CLR)是如何实现异常处理与异常安全机制的?

考察说明

考查对 CLR 异常处理机制和异常安全性的理解。

回答思路

  1. 【回答框架 1】CLR 异常处理基于结构化异常处理(SEH),每个线程维护异常处理链,异常抛出时沿调用栈搜索匹配的 catch 块。
  2. 【回答框架 2】异常对象存储堆栈信息,catch 块按类型匹配,finally 块保证资源释放,异常过滤器和受约束执行区域提供高级控制。
  3. 【回答框架 3】异常安全指代码在异常发生时保持资源一致性和状态正确性,常见策略包括基本保证、强保证和不抛出保证。
  4. 【回答框架 4】实现异常安全需使用 RAII 模式(如 using 语句)、智能指针或手动 try-catch-finally 管理资源,并注意避免资源泄漏和状态损坏。
  5. 【关键点 1】CLR 使用 SEH 机制,异常沿调用栈传播,匹配 catch 类型。
  6. 【关键点 2】finally 块确保清理,但需注意异常过滤器的性能和语义。
  7. 【关键点 3】异常安全级别包括基本、强和 no-throw,需要合理选择。
  8. 【关键点 4】使用 using 或 using var 确保非托管资源释放。
  9. 【易错点 1】过度捕获异常,掩盖真实错误,导致调试困难。
  10. 【易错点 2】在 catch 中抛出新异常可能丢失原始堆栈信息,除非使用 InnerException。
  11. 【易错点 3】忽略 finally 块中的异常可能跳过后续代码,导致清理不完整。