ApplicationException和Exception

LMTZ 2006-04-07 11:50:52
为什么一些编码规范都推荐:
自定义异常继承自ApplicationException,
而不是直接从Exception继承?
...全文
1122 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LMTZ 2006-04-13
  • 打赏
  • 举报
回复
又看了番茄的引用,有了新的理解:

(1)ApplicationException 由用户程序抛出,也就是说要在代码中编写
throw ApplicationException。
这个类是为了区别CLR抛出的异常而设计的,
所以根据这一原则,我们定义自己的异常类的时候要从ApplicationException继承。

(2)SystemException 由CLR抛出,例如数组越界,类型转换错误等,都会被此异常捕捉,
因为InvalidCastException、InvalidOperationException等异常都是继承于
SystemException的。

所以程序中按照以下这样写就可以了----
try
{
......
}
catch (ApplicationException appEx)
{
MessageBox.Show(appEx.Message);
}
catch (SystemException sysEx)
{
MessageBox.Show(sysEx.Message);
}
LMTZ 2006-04-10
  • 打赏
  • 举报
回复
听了以上两位的解释,我的理解是:
这两个类在功能上是相同的,只是意义上不同,相当于.Net为我们自定义了一个用于应用程序的异常类。

.Net内部代码的实现类似于:
class ApplicationException : Exception
{
public ApplicationException() : base() {}

public ApplicationException(string message) : base(message) {}

public ApplicationException(string message, Exception innerException
) : base(message, innerException) {}

protected ApplicationException(SerializationInfo info, StreamingContext context) : base(info, context) {}

}

我的理解正确吗?
jiezhi 2006-04-07
  • 打赏
  • 举报
回复
ApplicationException只是简单地从Exception继承过来的,没有添加任何东西,它只是表示一个含义罢了。所以推荐从这里继承,定义自己的异常类
chenxi6713 2006-04-07
  • 打赏
  • 举报
回复
常用的异常就是两大类,一种是SystemException预定义的公共语言运行库异常类的基类,另外就是ApplicationException用户定义的应用程序异常类型的基类。

ApplicationException 由用户程序引发,而不是由公共语言运行库引发。如果打算设计需要创建自己的异常的应用程序,请从 ApplicationException 类派生。ApplicationException 扩展 Exception,但不添加新功能。此异常作为一种区分应用程序定义的异常与系统定义的异常的方法而提供。

参考微软的http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/exceptdotnet.asp
Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax.ejb.AfterCompletion.class javax.ejb.ApplicationException.class javax.ejb.Asynchronous.class javax.ejb.AsyncResult.class javax.ejb.BeforeCompletion.class javax.ejb.ConcurrencyManagement.class javax.ejb.ConcurrencyManagementType.class javax.ejb.ConcurrentAccessException.class javax.ejb.ConcurrentAccessTimeoutException.class javax.ejb.CreateException.class javax.ejb.DependsOn.class javax.ejb.DuplicateKeyException.class javax.ejb.EJB.class javax.ejb.EJBAccessException.class javax.ejb.EJBContext.class javax.ejb.EJBException.class javax.ejb.EJBHome.class javax.ejb.EJBLocalHome.class javax.ejb.EJBLocalObject.class javax.ejb.EJBMetaData.class javax.ejb.EJBObject.class javax.ejb.EJBs.class javax.ejb.EJBTransactionRequiredException.class javax.ejb.EJBTransactionRolledbackException.class javax.ejb.embeddable.EJBContainer.class javax.ejb.EnterpriseBean.class javax.ejb.EntityBean.class javax.ejb.EntityContext.class javax.ejb.FinderException.class javax.ejb.Handle.class javax.ejb.HomeHandle.class javax.ejb.IllegalLoopbackException.class javax.ejb.Init.class javax.ejb.Local.class javax.ejb.LocalBean.class javax.ejb.LocalHome.class javax.ejb.Lock.class javax.ejb.LockType.class javax.ejb.MessageDriven.class javax.ejb.MessageDrivenBean.class javax.ejb.MessageDrivenContext.class javax.ejb.NoMoreTimeoutsException.class javax.ejb.NoSuchEJBException.class javax.ejb.NoSuchEntityException.class javax.ejb.NoSuchObjectLocalException.class javax.ejb.ObjectNotFoundException.class javax.ejb.PostActivate.class javax.ejb.PrePassivate.class javax.ejb.Remote.class javax.ejb.RemoteHome.class javax.ejb.Remove.class javax.ejb.RemoveException.class javax.ejb.Schedule.class javax.ejb.ScheduleExpression.class javax.ejb.Schedules.class javax.ejb.SessionBean.class javax.ejb.SessionContext.class javax.ejb.SessionSynchronization.class javax.ejb.Singleton.class javax.ejb.spi.EJBContainerProvider.class javax.ejb.spi.HandleDelegate.class javax.ejb.Startup.class javax.ejb.Stateful.class javax.ejb.StatefulTimeout.class javax.ejb.Stateless.class javax.ejb.TimedObject.class javax.ejb.Timeout.class javax.ejb.Timer.class javax.ejb.TimerConfig.class javax.ejb.TimerHandle.class javax.ejb.TimerService.class javax.ejb.TransactionAttribute.class javax.ejb.TransactionAttributeType.class javax.ejb.TransactionManagement.class javax.ejb.TransactionManagementType.class javax.ejb.TransactionRequiredLocalException.class javax.ejb.TransactionRolledbackLocalException.class javax.interceptor.AroundInvoke.class javax.interceptor.AroundTimeout.class javax.interceptor.ExcludeClassInterceptors.class javax.interceptor.ExcludeDefaultInterceptors.class javax.interceptor.Interceptor.class javax.interceptor.InterceptorBinding.class javax.interceptor.Interceptors.class javax.interceptor.InvocationContext.class javax.xml.rpc.handler.GenericHandler.class javax.xml.rpc.handler.Handler.class javax.xml.rpc.handler.HandlerChain.class javax.xml.rpc.handler.HandlerInfo.class javax.xml.rpc.handler.HandlerRegistry.class javax.xml.rpc.handler.MessageContext.class
文档中包含如下: META-INF / LICENSE.txt META-INF / MANIFEST.MF META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.properties META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.xml javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax.ejb.AfterCompletion.class javax.ejb.ApplicationException.class javax.ejb.AsyncResult.class javax.ejb.Asynchronous.class javax.ejb.BeforeCompletion.class javax.ejb.ConcurrencyManagement.class javax.ejb.ConcurrencyManagementType.class javax.ejb.ConcurrentAccessException.class javax.ejb.ConcurrentAccessTimeoutException.class javax.ejb.CreateException.class javax.ejb.DependsOn.class javax.ejb.DuplicateKeyException.class javax.ejb.EJB.class javax.ejb.EJBAccessException.class javax.ejb.EJBContext.class javax.ejb.EJBException.class javax.ejb.EJBHome.class javax.ejb.EJBLocalHome.class javax.ejb.EJBLocalObject.class javax.ejb.EJBMetaData.class javax.ejb.EJBObject.class javax.ejb.EJBTransactionRequiredException.class javax.ejb.EJBTransactionRolledbackException.class javax.ejb.EJBs.class javax.ejb.EnterpriseBean.class javax.ejb.EntityBean.class javax.ejb.EntityContext.class javax.ejb.FinderException.class javax.ejb.Handle.class javax.ejb.HomeHandle.class javax.ejb.IllegalLoopbackException.class javax.ejb.Init.class javax.ejb.Local.class javax.ejb.LocalBean.class javax.ejb.LocalHome.class javax.ejb.Lock.class javax.ejb.LockType.class javax.ejb.MessageDriven.class javax.ejb.MessageDrivenBean.class javax.ejb.MessageDrivenContext.class javax.ejb.NoMoreTimeoutsException.class javax.ejb.NoSuchEJBException.class javax.ejb.NoSuchEntityException.class javax.ejb.NoSuchObjectLocalException.class javax.ejb.ObjectNotFoundException.class javax.ejb.PostActivate.class javax.ejb.PrePassivate.class javax.ejb.Remote.class javax.ejb.RemoteHome.class javax.ejb.Remove.class javax.ejb.RemoveException.class javax.ejb.Schedule.class javax.ejb.ScheduleExpression.class javax.ejb

110,577

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧