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

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

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

Ответ 1

Наследовать от System.Exception. System.ApplicationException бесполезен, и в директивах по дизайну указано " Не бросить или получить от System.ApplicationException".

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

Ответ 2

В С# IDE введите "exception" и нажмите "TAB". Это расширится, чтобы вы начали писать новый тип исключения. Есть комментарии со ссылками на некоторые обсуждения практики исключений.

Лично я большой поклонник создания множества небольших классов, причем это распространяется на типы исключений. Например, при написании класса 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.

Ответ 3

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

Ответ 4

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

Ответ 5

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