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

StackOverflow https://stackoverflow.com/questions/52753

  •  09-06-2019
  •  | 
  •  

在 .NET 解决方案中创建异常类时的最佳实践是什么:源自 System.Exception 或来自 System.ApplicationException?

有帮助吗?

解决方案

根据 Jeffery Richter 在《框架设计指南》一书中的说法:

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

它的目的是具有某种意义,因为您可以潜在地捕获“所有”应用程序异常,但是没有遵循该模式,因此它没有任何价值。

其他提示

您应该从中派生自定义异常 System.Exception.

甚至 MSDN 现在也说忽略 ApplicationException:

如果您正在设计需要创建自己的异常的应用程序,则建议您从异常类中得出自定义异常。最初认为自定义应从ApplicationException类得出。但是,实际上尚未发现这增加了重大价值。有关更多信息,请参阅 处理异常的最佳实践.

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

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

我习惯这样做:

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 模式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top