24

在上一个关于异常的问题的后续行动中,在 .NET 中创建自定义异常的最佳实践是什么?

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

4

5 回答 5

26

在 C# IDE 中,键入“exception”并按 TAB。这将扩展以帮助您开始编写新的异常类型。有一些评论和一些关于异常实践的讨论的链接。

就个人而言,我非常喜欢创建大量的小类,这些小类扩展到异常类型。例如,在编写 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") 
    {
    }
}

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

于 2008-09-10T18:27:35.680 回答
16

继承自System.ExceptionSystem.ApplicationException是没用的,设计指南说“不要抛出或派生自System.ApplicationException.”

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

于 2008-09-10T17:57:04.413 回答
5

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

于 2008-09-10T17:58:48.543 回答
1

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

于 2008-09-10T17:56:36.893 回答
1

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

于 2008-09-10T17:57:31.510 回答