C # - обработка исключений
Исключением является проблема, возникающая во время выполнения программы. Исключение AC # - это реакция на исключительное обстоятельство, которое возникает во время работы программы, например, попытка деления на ноль.
Исключения позволяют передавать управление от одной части программы к другой. Обработка исключений C # построена на четырех ключевых словах:try, catch, finally, и throw.
try- Блок try идентифицирует блок кода, для которого активированы определенные исключения. За ним следует один или несколько блоков catch.
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.ApplicationExceptionclass поддерживает исключения, генерируемые прикладными программами. Следовательно, исключения, определенные программистами, должны быть производными от этого класса.
В System.SystemException class - это базовый класс для всех предопределенных системных исключений.
В следующей таблице представлены некоторые из предопределенных классов исключений, производных от класса 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 Обрабатывает ошибки, возникающие из-за переполнения стека. |
Обработка исключений
C # предоставляет структурированное решение обработки исключений в виде блоков try и catch. Используя эти блоки, операторы основной программы отделяются от операторов обработки ошибок.
Эти блоки обработки ошибок реализованы с использованием try, catch, и finallyключевые слова. Ниже приведен пример выдачи исключения при выполнении условия деления на ноль.
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класс. Следующий пример демонстрирует это -
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, чтобы выбросить текущий объект как -
Catch(Exception e) {
...
Throw e
}