maestro7it_education
Урок 9. Обработка исключений в C#
Обработка исключений в C# позволяет перехватывать и управлять ошибками, которые возникают во время выполнения программы.
Это важная часть разработки, которая помогает сделать программы более надёжными и устойчивыми к ошибкам.
Конструкция try
, catch
, finally
try:
блок кода, в котором может возникнуть исключение.
catch:
блок кода для обработки исключений, которые были выброшены в блоке try.
finally:
блок кода, который выполняется независимо от того, произошло исключение или нет. Обычно используется для освобождения ресурсов.
Пример использования:
public class Program{ public static void Main() { try { int[] numbers = { 1, 2, 3 }; Console.WriteLine(numbers[5]); // Это вызовет исключение } catch (IndexOutOfRangeException ex) { Console.WriteLine("Ошибка: Индекс находится вне допустимого диапазона."); Console.WriteLine($"Подробности: {ex.Message}"); } catch (Exception ex) { Console.WriteLine("Произошла ошибка."); Console.WriteLine($"Подробности: {ex.Message}"); } finally { Console.WriteLine("Этот блок выполняется всегда."); } }}
Создание собственных исключений
Можно создавать собственные классы исключений, унаследовав их от базового класса Exception
или одного из его подклассов.
Пример создания собственного исключения:
public class CustomException : Exception{ public CustomException() { }
public CustomException(string message) : base(message) { }
public CustomException(string message, Exception inner) : base(message, inner) { }}
Использование собственного исключения:
public class Program{ public static void Main() { try { throw new CustomException("Это пользовательское исключение."); } catch (CustomException ex) { Console.WriteLine($"Поймано пользовательское исключение: {ex.Message}"); } }}
Работа с исключениями и их обработка
1. Перехват нескольких типов исключений:
Можно использовать несколько блоков catch
, чтобы перехватывать различные типы исключений по отдельности.
try{ // Код, который может вызвать исключение}catch (FileNotFoundException ex){ Console.WriteLine("Файл не найден.");}catch (IOException ex){ Console.WriteLine("Ошибка ввода-вывода.");}catch (Exception ex){ Console.WriteLine("Произошла ошибка.");}
2. Использование исключений для управления потоком выполнения:
Исключения не должны использоваться для управления нормальным потоком выполнения программы.
Они предназначены для обработки ошибок и непредвиденных ситуаций.
3. Создание цепочки исключений:
Можно создать цепочку исключений, передавая исходное исключение в конструктор нового исключения.
Это позволяет сохранить информацию о первоначальной ошибке.
try{ // Код, который может вызвать исключение}catch (Exception ex){ throw new CustomException("Произошла ошибка в процессе выполнения.", ex);}
4. Логирование исключений:
Важно логировать исключения для последующего анализа и отладки.
Можно использовать встроенные средства логирования или сторонние библиотеки.
Пример с использованием библиотеки NLog:
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public class Program{ public static void Main() { try { // Код, который может вызвать исключение } catch (Exception ex) { Logger.Error(ex, "Произошла ошибка."); } }}
Автор: Дуплей Максим Игоревич
Дата: 07.09.2024
Версия: 1.0