Каковы рекомендации по созданию собственного исключения?

StackOverflow https://stackoverflow.com/questions/54851

  •  09-06-2019
  •  | 
  •  

Вопрос

В продолжение предыдущий вопрос Что касается исключений, каковы наилучшие методы создания собственных исключений в .NET?

Более конкретно, следует ли вам наследовать от System.Exception, System.ApplicationException или другого базового исключения?

Это было полезно?

Решение

Наследовать от System.Exception. System.ApplicationException бесполезно, и в рекомендациях по проектированию говорится: "Не бросить или получить из System.ApplicationException."

Видеть http://blogs.msdn.com/kcwalina/archive/2006/06/23/644822.aspx

Другие советы

В C# IDE введите «исключение» и нажмите 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") 
    {
    }
}

Я предпочитаю третий вариант, потому что считаю его объектно-ориентированным решением.

Для этого есть фрагмент кода.Используйте это.Кроме того, после этого проверьте анализ кода;в фрагменте отсутствует один из конструкторов, которые вам следует реализовать.

Я думаю, что самая важная вещь, которую следует помнить при работе с исключениями на любом уровне (создание пользовательских настроек, выдача, перехват), — это то, что исключения предназначены только для исключительных условий.

Базовым исключением, от которого наследуются все остальные исключения, является System.Exception, и это то, что вы должны наследовать, если, конечно, вы не используете такие вещи, как, скажем, сообщения по умолчанию о более конкретном исключении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top