自定义异常类是否应当派生自System.ApplicationException?
自定义异常类是否应当派生自
System.ApplicationException? 不推荐自定义异常派生自System.ApplicationException,直接继承System.Exception类是.NET官方目前建议的最佳实践
原因说明
ApplicationException的设计初衷是区分系统级异常和应用自定义异常,但该设计已经被.NET官方弃用,不推荐继续使用。
具体原因如下:
- 该类的定位本身存在设计缺陷,实际开发中几乎没有需要统一捕获所有应用级异常的场景,大多时候都是捕获具体的自定义异常类型做针对性处理,继承
ApplicationException没有实际价值 - 部分.NET 框架内置的异常同样继承自
ApplicationException,完全破坏了「仅用户自定义应用异常才继承该类」的设计约定,导致该类的区分作用完全失效 - 微软官方文档的自定义异常示例已全部改为直接继承
Exception类,该实践已经成为.NET生态的通用标准
自定义异常正确实现示例
[Serializable] public class CustomBusinessException : Exception { // 保留默认的四个构造函数即可覆盖绝大多数使用场景 public CustomBusinessException() { } public CustomBusinessException(string message) : base(message) { } public CustomBusinessException(string message, Exception innerException) : base(message, innerException) { } protected CustomBusinessException( System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context) { } }
内容的提问来源于stack exchange,提问作者Clowo
相关产品推荐
相关产品推荐

