2016-11-16 60 views
2

由于.NET 1.1或2.0,Microsoft已更改用户异常定义的建议。从System.Exception而不是System.ApplicationException继承用户例外是now recommended。我在StackOverflow上找到了this question,但它只是以FxCop规则的形式重复MSDN推荐。但是,FxCop规则中的解释也不具说服力。 从你在应用程序中继承用户异常,为什么?为什么建议从Exception继承,而不是ApplicationException

+0

在99%的情况下,我从System.Exception中感到内疚。如果我需要更特殊的东西,像一个特殊的ArgumentException,我会从System.ArgumentException异常。但通常一个ArgumentException就足够了,我不需要自定义异常。异常只是异常树中的第一个根。 – Sebi

+0

当我编写一个使用异常并引发它自己的模块(应用程序,服务,框架)时,我发现需要用户异常,应该区别于IO和其他.NET框架异常。 –

+0

没有这样的需求,如果你想要区分它,那么从System.Exception继承是绰绰有余的。这就是为什么建议存在它已经足够从System.Exception继承System.Exception从System.ApplicationException继承只是用于如果你想破坏约定 – kirie

回答

0

我想大多数程序员都会继承System.Exception的形式,因为对于大多数例外情况(这也是here),这是一个很好的做法,大多数程序员都遵循最佳实践。另外我猜这个问题是基于主要观点的,因为人们可能会认为在某些情况下继承System.Exception并不是必须的,并且选择一些其他基类,例外类是很好的,所以这可能是一个有争议的方法。

+1

我会说,从System.ApplicationException继承指出,这个异常“属于”应用程序,而不是一些特定的情况下像参数或IO。从基本的异常类继承看起来很奇怪。 –

0

因为从ApplicationException继承没有提供足够的值来值得练习。从this MSDN page

如果您正在设计需要创建自己异常的应用程序,建议您从Exception类派生自定义异常。最初认为自定义异常应该来自ApplicationException类;然而在实践中,这并没有被发现增加显着价值。

+0

这取决于你定义的“价值”。我想说,从设计者的角度来看,我从基类Exception类继承的事实意味着我的异常类提供了一些基本信息。如果它继承自ApplicationException,那么它只是一些应用程序级别的异常。 –