Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Нижний индекс не меньше верхнего




Сгенерируем ошибки непопадания в диапазон.

Console.WriteLine(

Else throw new RangeArrayException(

Throw new RangeArrayException(

Throw new RangeArrayException(

"Нижний индекс не меньше верхнего."),

}

а = new int[high - low];

len = high - low;

lowerBound = low;

upperBound = --high;

}

// Свойство Length, предназначенное только для чтения,

public int Length {

get {

return len;

}}

// Индексатор для объекта класса RangeArray.

public int this[int index] {

// Средство для чтения элемента массива,

get {

if(ok(index)) {

return a[index - lowerBound];

} else {

"Ошибка нарушения границ диапазона.");

}}

// Средство для записи элемента массива.-

set {

if(ok(index)) {

a[index - lowerBound] = value;

}

"Ошибка нарушения границ диапазона.");

}}

// Метод возвращает значение true,

// если индекс в пределах диапазона,

private bool ok(int index) {

if(index >= lowerBound & index <= upperBound)

returntrue;

returnfalse;

}}

// Демонстрируем использование массива с заданным

// диапазоном изменения индекса,

classRangeArrayDemo {

public static void Main() {

try {

RangeArray ra = new RangeArray(-5, 5);

RangeArrayra2 = newRangeArray(1, 10);

// Демонстрируем использование объекта-массива га.

Console.WriteLine("Длина массива га: " + ra.Length);

for(int i = -5; i <= 5; i++)

ra[i] = i;

Console.Write("Содержимое массива ra: ");

for(int i = -5; i <= 5; i++)

Console.Write(ra[i] + " ");

Console.WriteLine("\n");

// Демонстрируем использование объекта-массива ra2.

Console.WriteLine("Длина массива ra2: " + ra2.Length);

for(int i = 1; i <= 10; i++)

ra2[i] = i;

Console.Write("Содержимое массива ra2: ");

for(int i = 1; i <= 10; i++)

Console.Write(ra2[i] + " ");

Console.WriteLine("\n");

} catch (RangeArrayException exc) {

Console.WriteLine(exc);

}

// Теперь демонстрируем "работу над ошибками".

"Сгенерируем ошибки непопадания в диапазон.");

// Используем неверно заданный конструктор,

try {

RangeArray ra3= new RangeArray(100, -10); // Ошибка!

} catch (RangeArrayException exc) {

Console.WriteLine(exc);

}

// Используем неверно заданный индекс,

try {

RangeArray ra3 = new RangeArray(-2, 2);

for(int i = -2; i <= 2; i++)

гаЗ [i] = i;

Console.Write("Содержимое массива ra3: ");

for(int i = -2; i <= 10; i++) // Ошибка непопадания

// в диапазон.

Console.Write(ra3[i] + " ");

} catch (RangeArrayException exc){

Console.WriteLine(exc);

}}

При выполнении этой программы получаем такие результаты:

Длина массиваra: 11

Содержимое массива ra: - 5 - 4 - 3 - 2 - 1 0 1 2 3 4 5

Длина массива ra2: 10

С о д е р ж и м о е м а с с и в а ra2: 1 2 3 4 5 6 7 8 9 1 0

Содержимое массива raЗ: - 2 - 1 0 1 2 Ошибка нарушения границ диапазона.

При возникновении ошибки нарушения границ диапазона RangeArray-объект генерирует объект типа RangeArrayException. Этот класс — производный от класса ApplicationException. Класс исключений, создаваемыйпрограммистом, обычно выводится из класса ApplicationException. Обратите внимание на то, что подобная ошибка может обнаружиться во время создания RangeArray-объекта. Чтобы перехватывать такие исключения, объекты классаRange Array должны создаваться внутри блока try, как это показано в программе. Сиспользованием исключений для сообщений об ошибках класс RangeArray теперьнапоминает один из встроенных С#-типов и может быть полностью интегрирован вмеханизм обработки исключений любой программы.

 

7.10 Перехват исключений производных классов

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

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

Следующая программа создает два класса исключений с именами ExceptA и ExceptB. Класс ExceptA выводится из класса ApplicationException, а класс ExceptB — из класса ExceptA. Затем программа генерирует исключение каждого типа.

// Инструкции перехвата исключений производных классов

// должны стоять перед инструкциями перехвата исключений

// базовых классов.

usingSystem;

// Создаем класс исключения.

class ExceptA: ApplicationException {

public ExceptA(): base() { }

public ExceptA(string str): base(str) { }

public override string ToStringO {

return Message;

}}

// Создаем класс исключения как производный

// от класса ExceptA.

class ExceptB: ExceptA {

public ExceptB(): base() { }

public ExceptB(string str): base(str) { }

public override string ToStringO {

return Message;

}}

class OrderMatters {

public static void Main() {

for(int x = 0; x < 3; x++) {

try {

if(x==0) throw new ExceptA(

"Перехват исключения типа ExceptA.");

else if(x==l) throw new ExceptB(

"Перехват исключения типа ExceptB.");

else throw new ExceptionO;

}

catch (ExceptBexc) {

// Перехватываем исключение.

Console.WriteLine(exc);

}

catch (ExceptAexc) {

// Перехватываем исключение.

Console.WriteLine(exc);

}

catch (Exception exc) {

Console.WriteLine(exc);

}}}}

Вот результаты выполнения этой программы:




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 299; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.018 сек.