Исключением является проблема, возникающая во время выполнения программы. Исключение 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.ApplicationException
поддерживает исключения, создаваемые прикладными программами. Следовательно, исключения, определенные программистами, должны вытекать из этого класса.
Класс System.SystemException
является базовым классом для всех предопределенных системных исключений.
В следующей таблице приведены некоторые предопределенные классы исключений, полученные из класса Sytem.SystemException
:
System.IO.IOException
Обрабатывает ошибки ввода-вывода.
System.IndexOutOfRangeException
Обрабатывает ошибки, возникающие, когда метод ссылается на индекс массива вне диапазона.
System.ArrayTypeMismatchException
Обрабатывает ошибки, возникающие, когда тип несовместим с типом массива.
System.NullReferenceException
Обрабатывает ошибки, возникающие при ссылке на нулевой объект.
System.DivideByZeroException
Обрабатывает ошибки, возникающие при делении дивиденда на ноль.
System.InvalidCastException
Обрабатывает ошибки, возникающие при типизации.
System.OutOfMemoryException
Обрабатывает ошибки, возникающие из-за недостаточной свободной памяти.
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
}
0 комментариев