Microsoft Лучшая практика говорит:
Ввод нового класса исключений только в том случае, если предопределенный класс не применяется.
И
Когда требуется специальное исключение, присвойте ему соответствующее имя и выведите его из класса Exception.
Извлечение из класса Exception имеет смысл, поскольку это позволяет нам обрабатывать определенные исключения и (например) регистрировать и выдавать остальное:
try
{
//something that might throw exceptions
}
catch(InvalidOperationException)
{
//Do something
}
catch(Exception ex)
{
//Log and throw other exception
throw;
}
Я не могу придумать причину, по которой можно создать экземпляры базового класса Exception. Итак, почему исключение не помечено как абстрактный класс?
Я думал, что перехват абстрактного исключения может вызвать некоторое специальное поведение, но, похоже, это не так:
public abstract class AbstractException : Exception
{
}
public class MyException : AbstractException
{
}
//...
try
{
throw new MyException();
}
catch (AbstractException)
{
//Works fine
}