我应该在.NET中从Exception或ApplicationException派生自定义exception吗?
在.NET解决scheme中创buildexception类时的最佳做法是:从System.Exception
或System.ApplicationException
派生?
根据框架devise指南书中的Jeffery Richter的说法:
System.ApplicationException
是一个不应该成为.NET框架的一部分的类。
这意味着你可能会捕捉所有的应用程序exception,但是没有遵循这个模式,所以它没有任何价值。
即使MSDN现在说忽略ApplicationException:
如果您正在devise需要创build自己exception的应用程序,则build议您从Exception类派生自定义exception。 最初认为自定义exception应该从ApplicationException类派生; 然而在实践中,这并没有被发现增加显着的价值。 有关更多信息,请参阅处理exception的最佳实践 。
http://msdn.microsoft.com/en-us/library/system.applicationexception.aspx
ApplicationException
被认为是无用的 – 一个强有力的,批判性的论点。
框架的作者自己认为ApplicationException是毫无价值的:
http://blogs.msdn.com/kcwalina/archive/2006/06/23/644822.aspx
在这里有一个很好的后续:
http://blogs.msdn.com/kcwalina/archive/2006/07/05/657268.aspx
如果有疑问,我遵循他们的书框架devise指南。
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,但是它很好,因为只有很less的类不尊重ApplicationException模式。