Sobes.tech
Назад к вопросам
Junior — Middle
59

Создавали ли вы собственные классы исключений в своих проектах?

Компании, где спрашивали
Robosoft

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Да, в рабочих проектах собственные исключения полезны там, где нужно явно различать бизнес-ошибки и технические ошибки. Обычно это делается для более точной обработки на верхнем уровне и для понятных сообщений в логах. Важно понимать, когда достаточно стандартных исключений, а когда действительно нужен свой тип.

Определение:

Собственное исключение в C# — это класс, который наследуется от Exception и используется для обозначения конкретной ошибки предметной области или приложения. Такие исключения помогают не смешивать разные причины сбоев и обрабатывать их отдельно. Обычно в них добавляют осмысленное имя, сообщение по умолчанию и, при необходимости, конструкторы для передачи причины ошибки.

Пример использования:

Например, в системе заказов можно бросать исключение, если пытаются оформить заказ с пустой корзиной.

using System;

public class EmptyCartException : Exception
{
    public EmptyCartException() : base("Корзина пуста.") { }

    public EmptyCartException(string message) : base(message) { }

    public EmptyCartException(string message, Exception innerException)
        : base(message, innerException) { }
}

public class OrderService
{
    public void CreateOrder(bool cartIsEmpty)
    {
        if (cartIsEmpty)
        {
            throw new EmptyCartException();
        }

        Console.WriteLine("Заказ создан");
    }
}

Пояснение кода:

Код показывает собственное исключение EmptyCartException, которое наследуется от Exception. Первый конструктор задаёт сообщение по умолчанию, второй позволяет передать своё сообщение, третий — сохранить исходное исключение в innerException, если ошибка была обёрнута из другого слоя.

Далее в OrderService.CreateOrder выполняется проверка: если корзина пустая, выбрасывается именно это исключение. На верхнем уровне приложения такой тип ошибки можно отловить отдельно и, например, показать пользователю понятное сообщение вместо общего текста о внутренней ошибке.

Ключевые моменты:

  • Свои исключения делают код понятнее, когда ошибка относится к бизнес-логике, а не к общим техническим сбоям.
  • Класс исключения обычно наследуют от Exception, а не от произвольного базового класса.
  • Хорошая практика — давать исключению конкретное имя, отражающее суть ошибки.
  • Часто добавляют конструкторы с сообщением и innerException для удобной диагностики.
  • Не стоит создавать собственное исключение без необходимости: если подходит стандартное, лучше использовать его.