【发布时间】:2010-09-08 08:10:48
【问题描述】:
在 .NET 解决方案中创建异常类时的最佳做法是:从 System.Exception 或 System.ApplicationException 派生?
【问题讨论】:
在 .NET 解决方案中创建异常类时的最佳做法是:从 System.Exception 或 System.ApplicationException 派生?
【问题讨论】:
根据框架设计指南一书中的 Jeffery Richter:
System.ApplicationException是一个不应属于 .NET 框架的类。
它的目的是为了有一些意义,因为您可以潜在地捕获“所有”应用程序异常,但没有遵循该模式,因此它没有任何价值。
【讨论】:
Exception?如果是的话,你能这么说吗?
您应该从 System.Exception 派生自定义异常。
现在连 MSDN 都说要忽略 ApplicationException:
如果您正在设计应用程序 需要创建自己的 例外,建议您导出 来自 Exception 的自定义异常 班级。原本以为 自定义异常应该来自 ApplicationException 类; 然而在实践中,这并没有 发现增加了显着的价值。为了 更多信息,请参阅Best Practices for Handling Exceptions。
http://msdn.microsoft.com/en-us/library/system.applicationexception.aspx
【讨论】:
ApplicationException considered useless 是反对ApplicationException 的有力且批判性的论据。
结果:不要使用它。派生自Exception。
【讨论】:
框架的作者自己认为 ApplicationException 毫无价值:
这里有一个很好的跟进:
如有疑问,我会遵循他们的书框架设计指南。
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.");
}
}
它允许做以下区别:
我知道不建议使用 ApplicationException,但它的效果很好,因为有 very few classes 不遵守 ApplicationException 模式。
【讨论】: