Стандартных исключении очень много, тем не менее программист может создавать и собственные исключения на основе класса Exception.
Программист может задать способ обработки исключения в специальном блоке кода, начинающемся с ключевого слова catch («перехватить»), который будет автоматически выполнен при возникновении соответствующей исключительной ситуации. Внутри блока можно, например, вывести предупреждающее сообщение или скорректировать значения величин и продолжить выполнение программы. Если этот блок не задан, система выполнит действия по умолчанию, которые обычно заключаются в выводе диагностического сообщения и нормальном завершении программы.
Процессом выбрасывания исключений, возникающих при переполнении, можно управлять. Для этого служат ключевые слова checked и unchecked. Слово checked включает проверку переполнения, слово unchecked выключает. При выключенной проверке исключения, связанные с переполнением, не генерируются, а результат операции усекается. Проверку переполнения можно реализовать для отдельного выражения или для целого блока операторов, например:
а = checked (b + с); // для выражения
unchecked { // для блока операторов
а = b + с;
}
Проверка не распространяется на функции, вызванные в блоке. Если проверка переполнения включена, говорят, что вычисления выполняются в проверяемом контексте, если выключена — в непроверяемом. Проверку переполнения выключают в случаях, когда усечение результата операции необходимо в соответствии с алгоритмом.
Можно задать проверку переполнения во всей программе с помощью ключа компилятора /checked, это полезно при отладке программы. Поскольку подобная проверка несколько замедляет работу, в готовой программе этот режим обычно не используется.
Мы подробно рассмотрим исключения и их обработку в разделе «Обработка исключительных ситуаций» (см. с. 89).
Основные операции С#
В этом разделе кратко описаны синтаксис и применение всех операций С#, кроме некоторых первичных, которые рассматриваются в последующих главах при изучении соответствующего материала.