Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обработка исключительных ситуаций.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
91 Кб
Скачать
☆

13.10.1 Наиболее часто используемые исключения

В пространстве имен System определено несколько стандартных, встроенных ис­ключений. Все эти исключения являются производными от класса SystemException, поскольку они генерируются системой CLR при появлении ошибки во время выпол­нения. В табл. 13.1 перечислены некоторые наиболее часто используемые стандартные исключения.

Таблица 13.1 – Наиболее часто используемые исключения,

определенные в пространстве имен System

Исключение

Значение

ArrayTypeMismatchException

Тип сохраняемого значения несовместим с типом массива

DivideByZeroException

Попытка деления на нуль

IndexOutOfRangeException

Индекс оказался за границами массива

InvalidCastException

Неверно выполнено динамическое приведение типов

OutOfMemoryExceprion

Недостаточно свободной памяти для дальнейшего выполнения программы. Это исключение может быть, например, сгенерировано, если для создания объекта с помощью оператора new не хватает памяти

OverflowException

Произошло арифметическое переполнение

NullReferenceException

Попытка использовать пустую ссылку, т. е. ссылку, которая не указывает ни на один из объектов

Большинство исключений, приведенных в табл. 13.1, не требует особых пояснений, кроме исключения NullReferenceException. Это исключение генерируется при по­пытке использовать пустую ссылку на несуществующий объект, например, при вы­зове метода по пустой ссылке. Пустой называется такая ссылка, которая не указывает ни на один из объектов. Для того чтобы создать такую ссылку, достаточно, например, присвоить явным образом пустое значение переменной ссылочного типа, используя ключевое слово null. Пустые ссылки могут также появляться и другими, менее оче­видными путями. Ниже приведен пример программы, демонстрирующий обработку исключения NullReferenceException.

Листинг 13.13

// Продемонстрировать обработку исключения NullReferenceException.

using System;

class X

{

int x;

public X(int a)

{

x = a;

}

public int Add(X o)

{

return x + o.x;

}

}

// Продемонстрировать генерирование и обработку

// исключения NullReferenceException.

class NREDemo

{

static void Main()

{

X p = new X(10);

X q = null; // присвоить явным образом пустое значение

// переменной q

int val;

try

{

val = p.Add(q); // эта операция приведет к исключительной

// ситуации

}

catch (NullReferenceException)

{

Console.WriteLine("Исключение NullReferenceException!");

Console.WriteLine("Исправление ошибки...\n");

// А теперь исправить ошибку.

q = new X(9);

val = p.Add(q);

}

Console.WriteLine("Значение val равно {0}", val);

}

}

Вот к какому результату приводит выполнение этой программы.

Исключение NullReferenceException!

Исправление ошибки...

Значение val равно 19

В приведенном выше примере программы создается класс X, в котором определя­ются член х и метод Add(), складывающий значение члена х в вызывающем объекте со значением члена х в объекте, передаваемом этому методу в качестве параметра. Оба объекта класса X создаются в методе Main(). Первый из них (переменная р) инициа­лизируется, а второй (переменная q)  нет. Вместо этого переменной q присваивается пустое значение. Затем вызывается метод р.Add() с переменной q в качестве аргумен­та. Но поскольку переменная q не ссылается ни на один из объектов, то при попытке получить значение члена q. х генерируется исключение NullReferenceException.