关于c#:创建自己的自定义异常的最佳做法是什么?

关于c#:创建自己的自定义异常的最佳做法是什么?

What are some best practices for creating my own custom exception?

在先前有关异常的问题的后续活动中,在.NET中创建自定义异常的最佳实践是什么?

更具体地说,您应该继承System.Exception,System.ApplicationException还是其他一些基本异常?


在C#IDE中,键入" exception",然后单击TAB。这将使您开始编写新的异常类型。有注释以及一些有关异常做法的讨论的链接。

就我个人而言,我非常喜欢创建许多小型类,在那儿扩展到异常类型。例如,在编写Foo类时,我可以选择以下选项:

  • throw new Exception("Bar happened in Foo");
  • throw new FooException("Bar happened");
  • throw new FooBarException();
  • 哪里

    1
    2
    3
    4
    class FooException : Exception
    {
        public FooException(string message) ...
    }

    1
    2
    3
    4
    5
    6
    7
    class FooBarException : FooException
    {
        public FooBarException()
            : base ("Bar happened")
        {
        }
    }

    我更喜欢第三个选项,因为我认为它是一个面向对象的解决方案。


    System.Exception继承。 System.ApplicationException是没有用的,并且设计准则说"不要抛出或从System.ApplicationException派生"。

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


    有一个代码段。用那个另外,事后检查代码分析;该代码段省略了您应实现的构造函数之一。


    从其继承所有其他异常的基本异常是System.Exception,这就是您应该继承的基本异常,除非您当然可以使用诸如更具体的异常的默认消息之类的东西。


    我认为在任何级别(进行自定义,抛出,捕获)处理异常时,要记住的最重要的一点是,异常仅适用于特殊情况。


    推荐阅读