在 .NET 解决方案中创建异常类时的最佳实践是:从System.Exception
还是从派生System.ApplicationException
?
5 回答
根据框架设计指南书中的杰弗里·里希特(Jeffery Richter):
System.ApplicationException
是一个不应属于 .NET 框架的类。
它旨在具有某种意义,因为您可以潜在地捕获“所有”应用程序异常,但是没有遵循该模式,因此它没有任何价值。
您应该从System.Exception
.
甚至 MSDN 现在都说要忽略ApplicationException
:
如果您正在设计需要创建自己的异常的应用程序,建议您从 Exception 类派生自定义异常。最初认为自定义异常应该从 ApplicationException 类派生;然而,在实践中,这并没有增加显着的价值。有关更多信息,请参阅处理异常的最佳实践。
http://msdn.microsoft.com/en-us/library/system.applicationexception.aspx
ApplicationException
认为无用是反对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.");
}
}
它允许做以下区别:
- 我必须修复的 C# 代码系统错误。
- 不需要我更正的“正常”用户错误。
我知道不建议使用 ApplicationException,但它的效果很好,因为很少有类不尊重 ApplicationException 模式。