在.NET解决方案中创建例外类时的最佳做法是:从System.Exception
还是从System.ApplicationException
派生?
答案 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.");
}
}
它允许区别:
我知道不建议使用ApplicationException,但它很有效,因为very few classes不尊重ApplicationException模式。