我应该从.NET中的Exception或者ApplicationException派生自定义异常吗?

时间:2020-03-05 18:50:18  来源:igfitidea点击:

在.NET解决方案中创建异常类时的最佳实践是:从" System.Exception"或者" System.ApplicationException"派生?

解决方案

回答

被认为无用的ApplicationException是针对ApplicationException的强大且至关重要的论据。

结果:请勿使用。从Exception派生。

回答

该框架的作者自己认为ApplicationException一文不值:

http://blogs.msdn.com/kcwalina/archive/2006/06/23/644822.aspx

在这里进行了很好的跟进:

http://blogs.msdn.com/kcwalina/archive/2006/07/05/657268.aspx

如有疑问,我遵循他们的书《框架设计指南》。

http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756

博客文章的主题在那里进一步讨论。

rp

回答

根据《框架设计指南》一书中的杰弗里·里希特(Jeffery Richter):

System.ApplicationException is a class that should not be part of the .NET framework.

它旨在具有某些含义,因为我们可能会捕获"所有"应用程序异常,但是未遵循该模式,因此它没有任何价值。

回答

我曾经做过:

private void buttonFoo_Click()
{
    try
    {
       foo();
    } 
    catch(ApplicationException ex)
    {
      Log.UserWarning(ex);
      MessageVox.Show(ex.Message);
    }
    catch(Exception ex)
    {
       Log.CodeError(ex);
       MessageBox.Show("Internal error.");
    }
}

它允许做以下事情之间的区别:

  • 我必须修复的C#代码系统错误。
  • 不需要我纠正的"正常"用户错误。

我知道不建议我们使用ApplicationException,但由于很少有不遵守ApplicationException模式的类,因此效果很好。

回答

我们应该从" System.Exception"派生自定义异常。

现在甚至MSDN都说要忽略ApplicationException

If you are designing an application
  that needs to create its own
  exceptions, you are advised to derive
  custom exceptions from the Exception
  class. It was originally thought that
  custom exceptions should derive from
  the ApplicationException class;
  however in practice this has not been
  found to add significant value. For 
  more information, see Best Practices for Handling Exceptions.

http://msdn.microsoft.com/zh-CN/library/system.applicationexception.aspx