Exception vs ApplicationException
Exception vs ApplicationException
在我们平时写的程序的时候,免不了要多程序流程做一些假定,如果条件不满足时,程序有时候需要抛出异常。
我们知道,异常分为两大类,既Exception和ApplicationException。
我们先看看微软给出的解释:Exception表示在应用程序执行期间发生的错误,由公共语言运行库引发。
ApplicatonException发生非致命应用程序错误时引发的异常,由用户程序引发,而不是由公共语言运行库引发。
我相信,很多人看了这种解释都会觉得很迷惑,不禁会提出这样的疑问,什么样的错误才算是致命的错误呢?
在很长时间以来,我是搞不清楚这两者之间有什么区别,在平时写程序的时候,我一直用Exception抛出异常。这几天我正好看Community Server(一下简称CS),在CS系统中,自定义异常处理类。这个自定义的异常处理类继承ApplicationException。我看了一下MSDN,给出了这样的解释:如果打算设计需要创建自己的异常的应用程序,请从 ApplicationException 类派生。ApplicationException 扩展 Exception,但不添加新功能。此异常作为一种区分应用程序定义的异常与系统定义的异常的方法而提供。
我特地建了一个Web项目,写了一小段程序,一个抛出Exception异常,一个抛出ApplicationException异常,好像没什么区别嘛。后来仔细想了想,如果程序在运行期间发生致命的错误,应该在系统的“事件查看器”中有记录吧,想到这,我打开系统事件查看器,不出所料,抛出的Exception异常在系统的事件查看器中有记录,而抛出的ApplicationException异常就没有记录。呵呵,原来他们的区别在这啊。
依据以上的描述,我得如下结论:
如果程序本身具备捕获异常并对异常信息做了相应的记录,我们就应该抛出ApplicationException异常。
如果程序将异常的捕获和处理交给CLR,我们就应该抛出Exception,这样我们的程序在错误的时候,在系统的事件查看器中,也有个历史记录可以查看。
在CS系统中,程序本身具备捕获异常并对异常信息做了相应的处理,他的异常处理类继承自ApplicationException就能理解了。
正面猛男