【发布时间】:2019-05-20 16:21:33
【问题描述】:
我对何时使用ApplicationException 感到困惑。在它声明的页面上
用作应用程序定义异常的基类。
在同一页面上有以下警告
您应该从 Exception 类而不是 ApplicationException 类派生自定义异常。不应在代码中引发 ApplicationException 异常,也不应捕获 ApplicationException 异常,除非您打算重新引发原始异常。
所以它应该作为应用程序定义异常的基类,但它不应该派生自,也不应该被捕获。不幸的是,警告没有说明任何进一步的推理。
在我们的应用程序中,我们想要捕获所有应用程序定义的异常,并将它们与 .net 本身的异常区别对待。因此,我们捕获了一个常见异常,所有应用程序定义的异常都源自该异常。
所以不要这样做
catch(AppCustomException ex) { ... }
catch(AnotherAppCustomException ex) { ... }
catch(YetAnotherAppCustomException ex) { ... }
我们有
catch(BaseCustomException ex) { ... } //All app custom exceptions derive from this type
我认为最好将 ApplicationException 作为所有自定义应用程序定义的异常的基础,而不是本示例中的 BaseCustomException。
一位同事争辩说,由于 MSDN 上的规定,我们不能将 ApplicationException 用于这种常见的基本异常类型。特别是,它不应该被派生出来,也不应该在不被重生时被捕获。出于某种原因,我们不会重新抛出这些异常。
所以我现在很困惑。 ApplicationException 的真正目的是什么?
【问题讨论】:
标签: .net inheritance exception exception-handling