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

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

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

Ответы [ 5 ]

26 голосов
/ 10 сентября 2008

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

Я предпочитаю третий вариант, потому что вижу его как решение OO.

16 голосов
/ 10 сентября 2008

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

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

5 голосов
/ 10 сентября 2008

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

1 голос
/ 10 сентября 2008

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

1 голос
/ 10 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...