Effective C# Item44:为应用程序创建特定的异常类

    异常是一种报告错误的机制,错误被处理的位置可能与其出现的位置相距甚远,所有有关错误原因的信息都必须保存在异常对象中,在这个过程中,我们可能希望将低级的错误翻译成与应用程序相关的特定错误,同时又不失去任何与源错误相关的信息。

    我们需要理解何时、为什么要创建新的异常类,以及怎样构造有价值的异常类层次。当开发人员编写catch语句时,他们会根据异常对象在运行时的不同类型来实现不同的行为,每一种行为就需要对应一个不同的异常类。

    不同的运行时异常类型拥有不同的catch语句,作为类库的作者,我们必须创建或者使用不同的异常类,从而使得catch语句能够执行不同的行为,如果不这样做,那么用户能拥有的选择就会很少。我们当然可以在一场被抛出的时候,直接挂起并退出应用程序,但是这样做是不负责任的。

    并不是所有的错误条件都应该将异常抛出,可以参考以下原则:如果它们不被立即处理或者报告,就会导致长期问题,例如数据库中的数据完整性错误应该产生异常,如果这种错误被忽略,那么问题将会越滚越大。

    我们在创建异常类时,采用的原则:人们在抛出异常时总倾向于过度使用System.Exception,这位将来的调用代码提供不了什么有用的信息,相反,经过仔细思考后创建必要的异常类,可以让调用方理解发生错误的原因,并为其提供最好的处理方式。

    下面来看如何创建异常类,在创建时,我们不应该从System.Exception类派生,而应该从System.ApplicationException派生,ApplicationException提供了4个构造函数,我们也需要创建这四个构造函数,同时可以使用基类中的构造函数。

 

    应用程序总会抛出异常,如果我们不做任何具体的处理,在我们调用.NET内核框架中的方法发生异常时,应用程序将产生.NET定义的异常对象,为异常提供更详细的信息可以帮助我们一级用户诊断错误,并尽可能的修复它们,当且仅当可能有不同的修复行为时,我们才应该创建多种不同的异常类。

你可能感兴趣的:(effective)