SystemException 是多余的吗?

Is SystemException redundant?

我了解将 ApplicationException 引入异常层次结构 is retrospectively seen 作为多余的举动。

同样,我明白没有理由直接从 SystemException 派生应用程序异常,Exception 通常应该用于此目的。我可以很好地想象从 ArgumentExceptionIOException 派生的情况可能是个好主意,尤其是在围绕这些实现预先存在的接口 designed/documented 时。但是,在应用程序代码中直接从 SystemException 派生对我来说与从 Exception 派生的等价物一样令人困惑,部分原因是我不知道 SystemException 试图表示什么。 (今天。历史上没有。)

MSDN 说:“作为系统异常命名空间的基础 class。...提供此 class 是为了区分系统异常和应用程序异常。”多么循环的定义。 class 用作区分从它派生的类型和不是从它派生的类型的方法。

在我看来,源自应用程序代码和系统代码的异常之间的整个历史区别似乎已经过时,尤其是在 catch 子句或记录的约定在抛出点之前很久就存在的依赖注入场景中;所以有大量编写良好的应用程序代码会抛出源自 SystemException.

的异常

我假设 SystemException 的存在理由是否正确,如果曾经有一个人随着 ApplicationException 的消亡而消失?具体来说,如果这种类型突然从继承层次结构中消失,它的子class直接从Exception派生,是否会丢失任何常用的可靠编码技术?

初衷很明显是要把异常分为系统中的异常和应用中的异常。这种区别并没有被证明是非常有用的,因为这些异常通常没有不同的处理方式。毕竟,所有异常的发生都是因为应用程序做了一些事情,系统不会四处走动,只会自己抛出异常。

ApplicationException 或多或少变得过时时,SystemException 也是如此,但是有一堆继承自 类 的异常,因此删除它们将是一个重大变化.可能有一些实际使用它们的应用程序,因此最好将它们留在原处,而不是冒着某些应用程序停止工作的风险。

根据抛出异常的位置对异常进行分类对于错误处理不是很有用,如果基于异常的处理方式进行分类可能会更有用。例如,您可能需要异常基础 类 来处理可以通过重复该过程解决的错误,以及无法从中恢复的错误。这实际上可以用于错误处理以不同方式处理异常。