КАТЕГОРИИ: Архитектура-(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; Просмотров: 320; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |