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

时间:2008-09-09 19:53:21

标签: .net exception

在.NET解决方案中创建例外类时的最佳做法是:从System.Exception还是从System.ApplicationException派生?

5 个答案:

答案 0 :(得分:60)

根据Jeffery Richter的框架设计指南书中的说明:

  

System.ApplicationException是一个不应该成为.NET框架一部分的类。

它的意思是有一些意义,因为你可能会捕获“所有”应用程序异常,但是没有遵循模式,因此它没有任何价值。

答案 1 :(得分:25)

您应该从System.Exception派生自定义例外。

即使MSDN现在也说要忽略ApplicationException

  

如果您正在设计应用程序   需要创建自己的   例外情况,建议您派生   异常中的自定义异常   类。原本以为是这样的   自定义异常应来自   ApplicationException类;   但实际上并没有这样做   发现增加了重要的价值。对于   更多信息,请参阅Best Practices for Handling Exceptions

http://msdn.microsoft.com/en-us/library/system.applicationexception.aspx

答案 2 :(得分:18)

ApplicationException considered useless是针对ApplicationException的强烈且批判性的论据。

Upshot:不要使用它。来自Exception

答案 3 :(得分:13)

框架的作者自己认为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

答案 4 :(得分:1)

我习惯了:

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,但它很有效,因为very few classes不尊重ApplicationException模式。