В C#, исключения используются для обработки ошибок и необычных ситуаций, которые могут возникнуть во время выполнения программы. Когда происходит исключительная ситуация, программный код может сгенерировать исключение, чтобы сообщить об ошибке и прервать обычный ход выполнения программы.
Вот некоторые базовые понятия и примеры использования исключений в C#:
1. Базовая структура обработки исключений:
“`csharp
try
{
// Код, который может вызвать исключение
}
catch (Exception ex)
{
// Обработка исключения
}
finally
{
// Код, выполняющийся в любом случае
}
“`
В блоке `try` размещается код, который может вызвать исключение. Если исключение происходит, выполнение программы переходит в блок `catch`, где можно обработать исключение или выполнить дополнительные действия. Блок `finally` используется для кода, который должен быть выполнен в любом случае, независимо от наличия исключения.
2. Генерация исключения:
“`csharp
throw new Exception(“Ошибка!”);
“`
Ключевое слово `throw` используется для генерации исключения. В примере выше генерируется исключение типа `Exception` с сообщением “Ошибка!”.
3. Обработка конкретных типов исключений:
“`csharp
try
{
// Код, который может вызвать исключение
}
catch (ArgumentNullException ex)
{
// Обработка исключения типа ArgumentNullException
}
catch (DivideByZeroException ex)
{
// Обработка исключения типа DivideByZeroException
}
catch (Exception ex)
{
// Обработка всех остальных исключений типа Exception
}
“`
Вы можете указывать различные блоки `catch` для обработки конкретных типов исключений. Блок `catch` с типом `Exception` обрабатывает все исключения, которые не были обработаны в предыдущих блоках `catch`.
4. Пользовательские исключения:
“`csharp
public class CustomException : Exception
{
public CustomException(string message) : base(message)
{
}
}
“`
Вы также можете создавать свои собственные пользовательские исключения, наследуясь от базового класса `Exception`.
Обработка исключений в C# позволяет контролировать и реагировать на ошибки в программе, предоставляя возможность вывести информацию об ошибке, принять корректирующие меры или завершить выполнение программы в контролируемой манере.
try/catch
В C#, блок `try/catch` используется для обработки исключений. Блок `try` содержит код, в котором может произойти исключение, а блок `catch` предназначен для перехвата и обработки исключения.
Вот пример использования блока `try/catch`:
“`csharp
try
{
// Код, который может вызвать исключение
int x = 10;
int y = 0;
int result = x / y;
Console.WriteLine(“Результат: ” + result);
}
catch (DivideByZeroException ex)
{
// Обработка исключения DivideByZeroException
Console.WriteLine(“Ошибка деления на ноль: ” + ex.Message);
}
catch (Exception ex)
{
// Обработка всех остальных исключений
Console.WriteLine(“Произошла ошибка: ” + ex.Message);
}
finally
{
// Код, выполняющийся в любом случае
Console.WriteLine(“Блок finally”);
}
“`
В этом примере блок `try` содержит код, в котором выполняется деление `x` на `y`, что может вызвать исключение `DivideByZeroException`, так как деление на ноль недопустимо. Если исключение возникает в блоке `try`, то выполнение программы переходит в соответствующий блок `catch`, где можно обработать исключение.
В приведенном примере у нас есть два блока `catch`. Первый блок `catch` с типом `DivideByZeroException` перехватывает исключение, вызванное делением на ноль. Второй блок `catch` с типом `Exception` перехватывает все остальные исключения, которые не были обработаны в предыдущем блоке `catch`.
Кроме того, в примере есть блок `finally`, который содержит код, выполняющийся в любом случае, независимо от того, возникло исключение или нет.
Обработка исключений с помощью `try/catch` позволяет контролировать и реагировать на ошибки в программе, предоставляя возможность вывести информацию об ошибке, выполнить определенные действия для восстановления или завершить выполнение программы в контролируемой манере.
Кастомные исключения
В C#, вы можете создавать собственные пользовательские исключения, наследуясь от базового класса `Exception` или его производных классов. Создание кастомных исключений позволяет вам определить собственные типы исключений, которые отражают особенности вашей программы или логику обработки ошибок.
Вот пример создания кастомного исключения в C#:
“`csharp
using System;
public class CustomException : Exception
{
public CustomException(string message) : base(message)
{
}
}
public class Program
{
public static void Main()
{
try
{
throw new CustomException(“Случилась кастомная ошибка!”);
}
catch (CustomException ex)
{
Console.WriteLine(“Обработка кастомного исключения: ” + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine(“Обработка других исключений: ” + ex.Message);
}
Console.WriteLine(“Нажмите любую клавишу для выхода…”);
Console.ReadKey();
}
}
“`
В этом примере мы создали класс `CustomException`, который наследуется от базового класса `Exception`. Мы переопределили конструктор, чтобы передать пользовательское сообщение в базовый класс.
Затем, в методе `Main`, мы используем оператор `throw` для генерации исключения типа `CustomException`. Затем мы обрабатываем это исключение с помощью блока `catch (CustomException ex)`, который будет перехватывать только исключения типа `CustomException`.
Также, мы добавили блок `catch (Exception ex)`, который будет перехватывать все остальные исключения, не обработанные в предыдущем блоке `catch`.
Создание кастомных исключений позволяет вам более гибко управлять ошибками и вносить собственную логику обработки ошибок в вашу программу. Вы можете определить специфические типы исключений, которые более точно отражают ошибки, связанные с вашим приложением или бизнес-логикой.