Исключительная ситуации или исключение (exception) – это возникновение в программе непредвиденного события, которое может порождаться некорректным использованием аппаратуры или неправильной работой программы. Типичные исключительные ситуации – деление на ноль, достижение конца файла, переполнение в арифметических операциях, обращение к несуществующему участку памяти. Обычно эти ситуации приводят к завершению выполнения программы с системным сообщением об ошибке. Механизм обработки исключений дает программисту возможность, определить каким образом программа может продолжить выполняться после обнаружения исключения.
Исключения позволяют логически разделить вычислительный процесс на две части - обнаружение аварийной ситуации и ее обработку. То есть функция обнаружившая ошибку, может «не знать» что делать для ее исправления, а функция вызывающая данную может «знать» что делать, но «не уметь» определить место обнаружения ошибки. Это позволяет не только улучшить структуру программы, но облегчает работу с библиотечными функциями и программами, состоящими из многих модулей.
Кроме того, для передачи информации об ошибке в вызывающую функцию не требуется применить возвращаемое значение, параметры и глобальные переменные. Это особенно важно для конструкторов классов[1], которые по синтаксису не могут возвращать значение.
Исключения С# не поддерживают обработку асинхронных событий, таких как ошибки оборудования или прерывания, например, нажатие клавиш Ctrl+C, но практически любое состояние, достигнутое в процессе выполнения программы, можно опередить как исключительную ситуацию (то есть не только аварийную ситуацию). Однако, это не имеет преимуществ перед другими решениями и не улучшает структуру и читаемость программы.
Исключение в программе может генерироваться двумя способами:
1. Стандартные исключения генерирует среда выполнения, они определены в пространстве имен System и являются потомками класса Exception. Часто используемые стандартные исключения приведены в таблице 1.
2. Исключение может определить программист с помощью конструкции throw.