Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Функции обработки исключений языка C# помогают справиться с непредвиденными или исключительными ситуациями, возникающими при выполнении программы. Обработка исключений использует try, catchи ключевые слова finally для проверки действий, которые могут не выполниться, для обработки сбоев при принятии решения о том, что это разумно сделать, и для очистки ресурсов после этого. Исключения могут создаваться средой CLR, библиотеками .NET или сторонними библиотеками или кодом приложения. Исключения создаются с помощью ключевого слова throw.
Во многих случаях исключение может быть вызвано не методом, который ваш код вызвал напрямую, а другим методом в стеке вызовов. При возникновении исключения среда CLR раскроет стек, ищет метод с блоком catch для конкретного типа исключения, и будет выполнять первый такой catch блок, который он находит. Если он не находит подходящий блок catch где-либо в стеке вызовов, он завершит процесс и отобразит сообщение пользователю.
В этом примере метод проверяет деление по нулю и перехватывает ошибку. Без обработки исключений эта программа завершалась бы с ошибкой DivideByZeroException был необработан.
public class ExceptionTest
{
static double SafeDivision(double x, double y)
{
if (y == 0)
throw new DivideByZeroException();
return x / y;
}
public static void Main()
{
// Input for test purposes. Change the values to see
// exception handling behavior.
double a = 98, b = 0;
double result;
try
{
result = SafeDivision(a, b);
Console.WriteLine($"{a} divided by {b} = {result}");
}
catch (DivideByZeroException)
{
Console.WriteLine("Attempted divide by zero.");
}
}
}
Обзор исключений
Исключения имеют следующие свойства:
- Исключения — это типы, производные от
System.Exception. - Используйте блок
tryвокруг инструкций, которые могут вызывать исключения. - После возникновения исключения в блоке
tryпоток управления переходит к первому связанному обработчику исключений, который присутствует в любом месте стека вызовов. В C#ключевое словоcatchиспользуется для определения обработчика исключений. - Если обработчик исключений для данного исключения отсутствует, программа перестает выполняться с сообщением об ошибке.
- Не перехватывайте исключение, если не можете обработать его и оставить приложение в предсказуемом состоянии. Если вы поймаете
System.Exception, повторно выбросьте его, используя ключевое словоthrowв конце блокаcatch. - Если блок
catchопределяет переменную исключений, ее можно использовать для получения дополнительных сведений о типе исключения, которое произошло. - Исключения можно явно создать программой с помощью ключевого слова
throw. - Объекты исключений содержат подробные сведения об ошибке, такие как состояние стека вызовов и текстовое описание ошибки.
- Код в блоке
finallyвыполняется независимо от того, возникает ли исключение. Используйте блокfinallyдля освобождения ресурсов, например для закрытия всех потоков или файлов, открытых в блокеtry. - Управляемые исключения в .NET реализованы поверх структурированного механизма обработки исключений Win32. Дополнительные сведения см. в структурированной обработке исключений (C/C++) и кратком курсе по углубленному изучению структурированной обработки исключений Win32.
Спецификация языка C#
Дополнительные сведения см. в исключениях в спецификации языка C#. Спецификация языка является авторитетным источником синтаксиса и использования C#.