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

我应该从.NET中的Exception或ApplicationException派生自定义异常吗?,.net,exception,.net,Exception,在.NET解决方案中创建异常类的最佳实践是什么:从System.exception或从System.ApplicationException派生?是反对ApplicationException的有力而关键的论据 结果:不要使用它。从异常< /代码> . 框架的作者自己考虑应用异常无价值: 这里有一个很好的跟进: 如果有疑问,我会遵循他们的书籍框架设计指南 这篇博文的主题将在这里进一步讨论 rp根据Jeffery Richter在《框架设计指南》一书中的说法: System.Applicat

在.NET解决方案中创建异常类的最佳实践是什么:从
System.exception
或从
System.ApplicationException
派生?

是反对
ApplicationException
的有力而关键的论据


结果:不要使用它。从<代码>异常< /代码> .

框架的作者自己考虑应用异常无价值:

这里有一个很好的跟进:

如果有疑问,我会遵循他们的书籍框架设计指南

这篇博文的主题将在这里进一步讨论


rp

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

System.ApplicationException
是一个不应属于.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

如果您正在设计应用程序 这需要建立自己的机制 例外情况,建议您导出 来自异常的自定义异常 班级。原来以为 自定义异常应派生自 ApplicationException类; 然而,在实践中,这并没有得到证实 发现能增加显著价值。对于 有关详细信息,请参阅


你知道的很少。任何遵循框架设计准则的人都不会从ApplicationException派生。如果要维护此模式,则需要创建自己的类型,如MyApplicationExcptionBase,并从中派生所有自定义异常。顺便说一句,指南说要创建几个派生的异常类型。你说得对:今天,如果我必须从头开始,我将创建一个“UserError”异常。尽管如此,我不会重构我的旧代码:这不是一个很好的批评。令人难以置信的是,考虑到微软出版社为MCTS 70-536考试准备的材料清楚地表明了相反的观点。。。啊!永远不要完全相信MS考试书。我读过的很少,总是充满了错误。这实际上并不能回答问题。您是说自定义应用程序异常应该继承自
异常
?如果是,你能这么说吗?是的,康拉德说得对。另一件相关的事情是:另一件被认为是有用的(或“最佳实践”),但实际上不是。