Что такое Exception?csharp-15

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

Основные понятия

  1. Исключительная ситуация — это проблема, которая нарушает нормальный поток выполнения программы (например, деление на ноль, обращение к несуществующему файлу).

  2. Иерархия исключений:

    • Все исключения наследуются от базового класса System.Exception.
    • Есть два основных типа:
      • SystemException (исключения, генерируемые CLR)
      • ApplicationException (пользовательские исключения)

Пример возникновения исключения

try
{
    int zero = 0;
    int result = 10 / zero; // DivisionByZeroException
}
catch (DivideByZeroException ex)
{
    Console.WriteLine($"Ошибка: {ex.Message}");
}

Ключевые компоненты обработки исключений

  1. try — блок кода, в котором может возникнуть исключение.
  2. catch — блок обработки исключения определенного типа.
  3. finally — блок, который выполняется всегда, независимо от того, было исключение или нет.
  4. throw — оператор для явного выброса исключения.

Важные особенности

  • Исключения являются объектами и содержат полезную информацию:

    • Message — описание ошибки
    • StackTrace — трассировка стека вызовов
    • InnerException — вложенное исключение
  • Можно создавать собственные исключения, наследуясь от Exception:

public class MyCustomException : Exception
{
    public MyCustomException(string message)
        : base(message) { }
}

Лучшие практики

  1. Не используйте исключения для управления потоком выполнения.
  2. Ловите конкретные типы исключений, а не общий Exception.
  3. Всегда освобождайте ресурсы в блоке finally или используйте using.
  4. Документируйте исключения, которые может выбрасывать ваш метод.

Резюмируем

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