Перейти к содержимому
шпаргалка.
Esc
навигацияоткрыть⌘Jпредпросмотр
На этой странице

Обработка исключений

Все темы С# Developer

Что такое Exception?

Исключение — это любое состояние ошибки или непредвиденное поведение, возникающее при выполнении программы. В .NET исключение — это объект, наследуемый от класса System.Exception. Исключение создается из области кода, где произошла проблема. Оно передаётся вверх по стеку до тех пор, пока его не обработает приложение либо программа не завершится.


Для чего служат try, catch, finally? В каком случае может не выполниться блок finally?

Конструкция try...catch...finally предназначена для обработки исключений. При использовании блока try...catch...finally происходит следующее:

  1. Выполнение блока try:

    • Все инструкции в блоке try выполняются.
  2. Блок try завершен без исключений:

    • Если в блоке try не возникло исключений, то после его выполнения начинает выполняться блок finally.
  3. Исключение в блоке try:

    • Если в блоке try возникает исключение, то обычный порядок выполнения останавливается, и среда CLR начинает искать блок catch, который может обработать данное исключение.
  4. Обработка исключения блоком catch:

    • Если нужный блок catch найден, то он выполняется, и после его завершения выполняется блок finally.
  5. Исключение не обработано:

    • Если нужный блок catch не найден, то при возникновении исключения программа аварийно завершает свое выполнение.

Пример:

try {
    // Код, который может вызвать исключение
}
catch (Exception ex) {
    // Обработка исключения
}
finally {
    // Код, который выполняется всегда
}
  • try: Содержит код, который может вызвать исключение.

  • catch: Содержит код для обработки исключения.

  • finally выполняется при обычном выходе из try, включая return и раскрутку стека при исключении. Это не абсолютная гарантия: блок может не выполниться при Environment.FailFast, принудительном завершении процесса или если выполнение не выходит из try.


Что такое call stack? Какие ключевые слова вы знаете?

Стек вызовов хранит цепочку активных вызовов методов. Окно Call Stack отладчика показывает эту цепочку; это представление стека, а не его определение. Для работы с исключениями используются try, catch, finally и throw.

Эта страница была полезной?