Учебники

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

Исключением является проблема, возникающая при выполнении программы. Исключение AC # — это ответ на исключительное обстоятельство, которое возникает во время работы программы, например, попытка деления на ноль.

Исключения предоставляют способ передачи управления из одной части программы в другую. Обработка исключений в C # построена на четырех ключевых словах: try , catch , finally и throw .

  • try — блок try идентифицирует блок кода, для которого активируются определенные исключения. За ним следует один или несколько блоков улова.

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

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

  • throw — программа выдает исключение при обнаружении проблемы. Это делается с помощью ключевого слова throw.

try — блок try идентифицирует блок кода, для которого активируются определенные исключения. За ним следует один или несколько блоков улова.

catch — программа ловит исключение с помощью обработчика исключений в том месте программы, где вы хотите решить проблему. Ключевое слово catch указывает на перехват исключения.

finally — блок finally используется для выполнения заданного набора операторов независимо от того, было ли выброшено исключение или нет. Например, если вы открываете файл, он должен быть закрыт независимо от того, возбуждено ли исключение или нет.

throw — программа выдает исключение при обнаружении проблемы. Это делается с помощью ключевого слова throw.

Синтаксис

Предполагая, что блок вызывает исключение, метод перехватывает исключение, используя комбинацию ключевых слов try и catch. Вокруг кода помещается блок try / catch, который может генерировать исключение. Код в блоке try / catch называется защищенным кодом, и синтаксис использования try / catch выглядит следующим образом:

try {
   // statements causing exception
} catch( ExceptionName e1 ) {
   // error handling code
} catch( ExceptionName e2 ) {
   // error handling code
} catch( ExceptionName eN ) {
   // error handling code
} finally {
   // statements to be executed
}

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

Классы исключений в C #

Исключения в C # представлены классами. Классы исключений в C # в основном прямо или косвенно получены из класса System.Exception . Некоторыми из классов исключений, полученных из класса System.Exception, являются классы System.ApplicationException и System.SystemException .

Класс System.ApplicationException поддерживает исключения, генерируемые прикладными программами. Следовательно, исключения, определенные программистами, должны быть производными от этого класса.

Класс System.SystemException является базовым классом для всех предопределенных системных исключений.

В следующей таблице представлены некоторые предопределенные классы исключений, полученные из класса Sytem.SystemException.

Sr.No. Исключительный класс и описание
1

System.IO.IOException

Обрабатывает ошибки ввода / вывода.

2

System.IndexOutOfRangeException

Обрабатывает ошибки, сгенерированные, когда метод ссылается на индекс массива вне диапазона.

3

System.ArrayTypeMismatchException

Обрабатывает ошибки, возникающие, когда тип не соответствует типу массива.

4

System.NullReferenceException

Обрабатывает ошибки, возникающие при обращении к нулевому объекту.

5

System.DivideByZeroException

Обрабатывает ошибки, возникающие при делении дивиденда на ноль.

6

System.InvalidCastException

Обрабатывает ошибки, сгенерированные во время приведения типов.

7

System.OutOfMemoryException

Обрабатывает ошибки, возникающие из-за недостатка свободной памяти.

8

System.StackOverflowException

Обрабатывает ошибки, вызванные переполнением стека.

System.IO.IOException

Обрабатывает ошибки ввода / вывода.

System.IndexOutOfRangeException

Обрабатывает ошибки, сгенерированные, когда метод ссылается на индекс массива вне диапазона.

System.ArrayTypeMismatchException

Обрабатывает ошибки, возникающие, когда тип не соответствует типу массива.

System.NullReferenceException

Обрабатывает ошибки, возникающие при обращении к нулевому объекту.

System.DivideByZeroException

Обрабатывает ошибки, возникающие при делении дивиденда на ноль.

System.InvalidCastException

Обрабатывает ошибки, сгенерированные во время приведения типов.

System.OutOfMemoryException

Обрабатывает ошибки, возникающие из-за недостатка свободной памяти.

System.StackOverflowException

Обрабатывает ошибки, вызванные переполнением стека.

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

C # предоставляет структурированное решение для обработки исключений в форме блоков try и catch. Используя эти блоки, основные программные операторы отделены от операторов обработки ошибок.

Эти блоки обработки ошибок реализованы с использованием ключевых слов try , catch и finally . Ниже приведен пример создания исключения при делении на ноль:

Live Demo

using System;

namespace ErrorHandlingApplication {
   class DivNumbers {
      int result;
      
      DivNumbers() {
         result = 0;
      }
      public void division(int num1, int num2) {
         try {
            result = num1 / num2;
         } catch (DivideByZeroException e) {
            Console.WriteLine("Exception caught: {0}", e);
         } finally {
            Console.WriteLine("Result: {0}", result);
         }
      }
      static void Main(string[] args) {
         DivNumbers d = new DivNumbers();
         d.division(25, 0);
         Console.ReadKey();
      }
   }
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Exception caught: System.DivideByZeroException: Attempted to divide by zero. 
at ...
Result: 0

Создание пользовательских исключений

Вы также можете определить свое собственное исключение. Определяемые пользователем классы исключений являются производными от класса Exception . Следующий пример демонстрирует это —

Live Demo

using System;

namespace UserDefinedException {
   class TestTemperature {
      static void Main(string[] args) {
         Temperature temp = new Temperature();
         try {
            temp.showTemp();
         } catch(TempIsZeroException e) {
            Console.WriteLine("TempIsZeroException: {0}", e.Message);
         }
         Console.ReadKey();
      }
   }
}
public class TempIsZeroException: Exception {
   public TempIsZeroException(string message): base(message) {
   }
}
public class Temperature {
   int temperature = 0;
   
   public void showTemp() {
      
      if(temperature == 0) {
         throw (new TempIsZeroException("Zero Temperature found"));
      } else {
         Console.WriteLine("Temperature: {0}", temperature);
      }
   }
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

TempIsZeroException: Zero Temperature found

Бросать предметы

Вы можете выбросить объект, если он прямо или косвенно является производным от класса System.Exception . Вы можете использовать оператор throw в блоке catch, чтобы выбросить текущий объект как —