由于.NET 1.1或2.0,Microsoft已更改用户异常定义的建议。从System.Exception
而不是System.ApplicationException
继承用户例外是now recommended。我在StackOverflow上找到了this question,但它只是以FxCop规则的形式重复MSDN推荐。但是,FxCop规则中的解释也不具说服力。 从你在应用程序中继承用户异常,为什么?为什么建议从Exception继承,而不是ApplicationException
回答
我想大多数程序员都会继承System.Exception
的形式,因为对于大多数例外情况(这也是here),这是一个很好的做法,大多数程序员都遵循最佳实践。另外我猜这个问题是基于主要观点的,因为人们可能会认为在某些情况下继承System.Exception
并不是必须的,并且选择一些其他基类,例外类是很好的,所以这可能是一个有争议的方法。
我会说,从System.ApplicationException继承指出,这个异常“属于”应用程序,而不是一些特定的情况下像参数或IO。从基本的异常类继承看起来很奇怪。 –
因为从ApplicationException继承没有提供足够的值来值得练习。从this MSDN page:
如果您正在设计需要创建自己异常的应用程序,建议您从Exception类派生自定义异常。最初认为自定义异常应该来自ApplicationException类;然而在实践中,这并没有被发现增加显着价值。
这取决于你定义的“价值”。我想说,从设计者的角度来看,我从基类Exception类继承的事实意味着我的异常类提供了一些基本信息。如果它继承自ApplicationException,那么它只是一些应用程序级别的异常。 –
- 1. 为什么建议从Python派生Exception而不是BaseException类?
- 2. 为什么UnhandledExceptionEventArgs.ExceptionObject对象而不是Exception?
- 3. 为什么Controller从GitHub上的ControllerBase继承而不是VS?
- 4. 为什么FormatException不会从ArgumentException继承?
- 5. 为什么不能从接口继承
- 6. 为什么不从ifstream继承
- 7. 为什么WPF TreeView控件继承自ItemsControl而不是Selector?
- 8. 为什么pyuic4继承对象而不是QDialog?
- 9. 从Own类继承而不是从XMLParserRuleContext
- 10. 什么是ApplicationException在.NET中?
- 11. 在Django中创建模型时,为什么类会继承models.Model而不是Model?
- 12. 为什么“Exception Exception”不能捕获SystemExit?
- 13. 我应该从std :: exception继承吗?
- 14. 从std :: exception继承的正确方法
- 15. 什么是类别的实际使用而不是继承?
- 16. 为什么我的类不是从父类继承的?
- 17. 为什么NSOrderedSet不是从NSSet继承的?
- 18. 为什么StringBuilder类不是从Stream继承的?
- 19. 为什么边界不是从这里继承的?
- 20. 为什么类级别的typedef不是从tempates继承的?
- 21. 继承而不是typedef
- 22. 什么是从基类继承的?
- 23. 继承控件的建议
- 24. C#继承概念建议
- 25. 表继承:设计建议?
- 26. 继承 - 为什么这是非法的?
- 27. 为什么继承输出是意外
- 28. OpenERP 7.0:为什么product.product从product.template继承?
- 29. 为什么一类从结构继承
- 30. 什么是子类从C++中的基类继承而来?
在99%的情况下,我从System.Exception中感到内疚。如果我需要更特殊的东西,像一个特殊的ArgumentException,我会从System.ArgumentException异常。但通常一个ArgumentException就足够了,我不需要自定义异常。异常只是异常树中的第一个根。 – Sebi
当我编写一个使用异常并引发它自己的模块(应用程序,服务,框架)时,我发现需要用户异常,应该区别于IO和其他.NET框架异常。 –
没有这样的需求,如果你想要区分它,那么从System.Exception继承是绰绰有余的。这就是为什么建议存在它已经足够从System.Exception继承System.Exception从System.ApplicationException继承只是用于如果你想破坏约定 – kirie