【发布时间】:2016-01-07 02:07:12
【问题描述】:
我知道将ApplicationException 引入异常层次结构is retrospectively seen 是多余的举动。
同样,我知道没有理由直接从SystemException 派生应用程序异常,并且Exception 通常应该用于此目的。我可以很好地想象从ArgumentException 或IOException 派生可能是一个好主意的情况,尤其是在实现围绕这些设计/记录的预先存在的接口时。但是,在应用程序代码中直接从SystemException 派生在我看来与从Exception 派生一样非常令人困惑,部分原因是我不知道SystemException 试图代表什么。 (今天。历史上没有。)
MSDN 说:“作为系统异常命名空间的基类。...提供这个类是为了区分系统异常和应用程序异常。”多么循环的定义.类用作区分从它派生的类型和不是从它派生的类型的一种方式。
在我看来,源自应用程序代码和系统代码的异常之间的整个历史区别似乎已经过时,尤其是在 catch 子句或文档化约定早在抛出点之前就存在的依赖注入场景中;所以有大量编写良好的应用程序代码会抛出源自SystemException 的异常。
如果有一个人随着ApplicationException 的消亡而消失,我是否正确地假设SystemException 的存在理由?具体来说,如果这种类型突然从继承层次结构及其直接派生自Exception 的子类中消失,是否会丢失任何常用的可靠编码技术?
【问题讨论】:
-
它只是被惯例打败了,没有人写过自己的 ArgumentOutOfRange 或 InvalidOperation 或 NotSupported 等异常。从文本编辑器开始 :)
-
@HansPassant - 我有时从 InvalidOperation 继承,有点想它分类或记录我的异常(类型)。但我更有可能直接抛出 InvalidOperation 。我明白你在谈论比我们更有影响力的软件:-)
标签: .net exception inheritance base-class-library