创建自己的自定义exception有哪些最佳做法?

在前一个关于exception的问题的后续内容中,在.NET中创建自定义exception的最佳实践是什么?

更具体地说,您应该inheritanceSystem.Exception,System.ApplicationException还是其他一些基本exception?

System.Exceptioninheritance。 System.ApplicationException没用,设计指南说“ 不要抛出或派生自System.ApplicationException

见http://blogs.msdn.com/kcwalina/archive/2006/06/23/644822.aspx

在C#IDE中,键入“exception”并单击TAB。 这将扩展为您开始编写新的exception类型。 有评论链接到一些exception实践的讨论。

就个人而言,我是创建大量小类的忠实粉丝,其扩展到exception类型。 例如,在编写Foo类时,我可以选择:

  1. throw new Exception("Bar happened in Foo");
  2. throw new FooException("Bar happened");
  3. 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的默认消息之类的东西。