При обчисленні виразів можуть виникнути помилки, наприклад, переповнювання, зникнення порядку або ділення на нуль. У С# є механізм, який дозволяє обробляти подібні помилки і таким чином уникати аварійного завершення програми. Він так і називається: механізм обробки виняткових ситуацій (виключень).
Якщо в процесі обчислень виникла помилка, система сигналізує про це за допомогою спеціальної дії, яка називається викиданням (генеруванням) виключення. Кожному типу помилки відповідає своє виключення. Оскільки С# - мова об'єктно-орієнтована, виключення є класами, які мають загального предка - клас Exception, визначений в просторі імен System. Наприклад, при діленні на нуль буде викинуто (згенеровано) виключення з довгим, але зрозумілим ім'ям DivideByZeroException, при недоліку пам'яті - виключення OutofMemoryException, при переповнюванні - виключення OverflowException. Стандартних виключень дуже багато, проте, програміст може створювати і власні виключення на основі класу Exception.
Програміст може задати спосіб обробки виключення в спеціальному блоці кода, що починається з ключового слова catch (“перехопити”), який буде автоматично виконаний при виникненні відповідної виняткової ситуації. Усередині блоку можна, наприклад, вивести застережливе повідомлення або скорегувати значення величин і продовжити виконання програми. Якщо цей блок не заданий, система виконує дії за умовчанням, які, зазвичай, полягають у виведенні діагностичного повідомлення при нормальному завершенні програми.
Процесом викидання виключень, що виникають при переповнюванні, можна управляти. Для цього служать ключові слова checked і unchecked. Слово checked включає перевірку переповнювання, слово unchecked вимикає. При вимкненій перевірці виключення, пов'язані з переповнюванням, не генеруються, а результат операції усікається. Перевірку переповнювання можна реалізувати для окремого виразу або для цілого блоку операторів, наприклад:
а = checked (b + с); // для виразу
unchecked {а = b + c;} //для блоку операторів
Перевірка не розповсюджується на функції, викликані в блоці. Якщо перевірка переповнювання включена, говорять, що обчислення виконуються в контексті, що перевіряється, якщо вимкнена - в тому, що не перевіряє. Перевірку переповнювання вимикають у випадках, коли усікання результату операції необхідне відповідно до алгоритму.
Можна задати перевірку переповнювання у всій програмі за допомогою ключа компілятора /checked, це корисно при відладці програми. Оскільки подібна перевірка декілька уповільнює роботу, в готовій програмі цей режим зазвичай не використовується.
3.2.3. Основні операції С#