什么是.net中的ApplicationException ?

本文关键字:ApplicationException 中的 net 什么 | 更新日期: 2023-09-27 17:50:32

抛出异常,我通常使用内置异常类,例如ArgumentNullExceptionNotSupportedException。然而,有时我需要使用自定义异常,在这种情况下,我这样写:

class SlippedOnABananaException : Exception { }
class ChokedOnAnAppleException : Exception { }

等等。然后我在代码中抛出并捕获这些。但今天我遇到了ApplicationException类-我应该用它代替吗?这是干什么用的?

拥有许多具有不同名称的有效相同的Exception类似乎效率低下(我通常不需要任何单独的功能)。但是我不喜欢捕捉一个通用的ApplicationException,并且必须使用额外的代码来确定错误是什么。

ApplicationException应该在哪里适合我的代码?

什么是.net中的ApplicationException ?

简短的回答是:无处可去。

这是过去的遗物,微软希望开发人员从ApplicationException中继承所有自定义异常。不久之后,他们改变了主意,建议自定义异常应该从Exception基类派生。请参阅处理MSDN上异常的最佳实践。

其中一个广为流传的原因来自Jeffery Richter在《框架设计指南》中的一段话:

系统。ApplicationException是一个不应该成为。net框架一部分的类。最初的想法是,从SystemException派生的类将指示从CLR(或系统)本身抛出的异常,而非CLR异常将从ApplicationException派生。然而,许多异常类并没有遵循这种模式。例如,TargetInvocationException(由CLR抛出)派生自ApplicationException。因此,ApplicationException类失去了所有意义。从这个基类派生的原因是允许调用堆栈更上层的一些代码捕获基类。捕获所有应用程序异常已不再可能。

就是这样了。执行摘要是ApplicationException不是有害的,只是无用的

根据msdn中的备注:

用户应用程序,而不是公共语言运行库,抛出从ApplicationException类派生的自定义异常。ApplicationException类区分应用程序定义的异常和系统定义的异常。

如果您正在设计一个需要创建自己的异常的应用程序,建议您从Exception类派生自定义异常。最初认为自定义异常应该从ApplicationException类派生;然而,在实践中,并没有发现这增加了显著的价值。有关更多信息,请参见处理异常的最佳实践。

Exception导出。此外,我不认为为您的案例创建新的异常有什么问题,只要它是有保证的。如果您遇到框架中已经存在异常的情况,请使用该异常,否则,请滚动您自己的异常。

在最初的设计中,在。net 1.0中,计划框架本身将抛出SystemException和派生;而用户应用程序-将抛出ApplicationException和派生。

但是后来,在。net 2.0中,它被删除了。

由此衍生自Exception

相关文章:
  • 没有找到相关文章