Первый конструктор используется по умолчанию. Во втором конструкторе указывается строка
Следует также заметить, что в четвертом конструкторе класса Exception типы Serializationlnfo и StreamingContext относятся к пространству имен System. Runtime.Serialization.
Наиболее часто используемые исключения
В пространстве имен System определено несколько стандартных, встроенных исключений. Все эти исключения являются производными от класса SystemException, поскольку они генерируются системой CLR при появлении ошибки во время выполнения. В табл. 13.1 перечислены некоторые наиболее часто используемые стандартные исключения.
Таблица 13.1. Наиболее часто используемые исключения, определенные в пространстве имен System
Исключение
Значение
ArrayTypeMismatchException
Тип сохраняемого значения несовместим с типом массива
DivideByZeroException
Попытка деления на нуль
IndexOutOfRangeException
Индекс оказался за границами массива
InvalidCastException
Неверно выполнено динамическое приведение типов
OutOfMemoryException
Недостаточно свободной памяти для дальнейшего выполнения программы. Это исключение может быть, например, сгенерировано, если для создания объекта с помощью оператора new не хватает памяти
OverflowException
Произошло арифметическое переполнение
NullReferenceException
Попытка использовать пустую ссылку, т.е. ссылку, которая не указывает ни на один из объектов
Большинство исключений, приведенных в табл. 13.1, не требует особых пояснений, кроме исключения NullReferenceException. Это исключение генерируется при попытке использовать пустую ссылку на несуществующий объект, например, при вызове метода по пустой ссылке.
// Продемонстрировать обработку исключения 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('Исправление ошибки... ');
// А теперь исправить ошибку, q = new X(9); val = p.Add(q);
}
Console.WriteLine('Значение val равно {0}', val);
}
}
Вот к какому результату приводит выполнение этой программы.
Исключение NullReferenceException!
Исправление ошибки...
