创建自己的自定义exception有哪些最佳做法?
在前一个关于exception的问题的后续内容中,在.NET中创建自定义exception的最佳实践是什么?
更具体地说,您应该inheritanceSystem.Exception,System.ApplicationException还是其他一些基本exception?
从System.Exception
inheritance。 System.ApplicationException
没用,设计指南说“ 不要抛出或派生自System.ApplicationException
。
见http://blogs.msdn.com/kcwalina/archive/2006/06/23/644822.aspx
在C#IDE中,键入“exception”并单击TAB。 这将扩展为您开始编写新的exception类型。 有评论链接到一些exception实践的讨论。
就个人而言,我是创建大量小类的忠实粉丝,其扩展到exception类型。 例如,在编写Foo类时,我可以选择:
-
throw new Exception("Bar happened in Foo");
-
throw new FooException("Bar happened");
-
throw new FooBarException();
哪里
class FooException : Exception { public FooException(string message) ... }
和
class FooBarException : FooException { public FooBarException() : base ("Bar happened") { } }
我更喜欢第三种选择,因为我认为它是一种OO解决方案。
有一个代码片段。 用那个。 另外,之后检查您的代码分析; 代码片段遗漏了您应该实现的构造函数之一。
我认为在处理任何级别的exception(进行自定义,抛出,捕获)时要记住的最重要的事情是exception仅适用于特殊情况。
所有其他exception从其inheritance的基本exception是System.Exception,这是您应该inheritance的,除非您当然使用诸如更具体exception的默认消息之类的东西。