.NET 中的异常处理与委托机制
1. 自定义异常的合理性
自定义异常存在的理由是,特定错误传达的信息不仅是对象处于不合适的状态,还能提供操作失败时对象状态的相关信息。
2. 未处理异常
当控制台应用程序抛出未处理的异常时,会显示异常类型、消息和堆栈跟踪,然后终止进程,无论异常是在主线程、显式创建的线程还是 CLR 创建的线程池线程中未处理。
CLR 提供了一种方法来发现未处理异常何时到达栈顶, AppDomain
类提供了 UnhandledException
事件,当任何线程上发生这种情况时,CLR 会引发该事件。以下是处理该事件的示例代码:
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException +=
// Crash deliberately to illustrate the Unhan
throw new InvalidOperationException();
}
private static void OnUnhandledException(object s, UnhandledExceptionEventArgs e)
{
Console.WriteLine($"An exception went unhandl");
}
当处理程序收到通知时,阻止异常已经太晚,CLR 会在调用处理程序后不久终止进程。该事件的主要作用是提供