Программирование >>  Программирование с использованием ajax 

1 ... 56 57 58 [ 59 ] 60 61 62 ... 396


Обработка исключений

1. Создайте новое консольное приложение по имени Ch07Ex02 и сохраните его в каталоге С: \BegVCSharp\Chapter07.

2. Измените его код следующим образом (показанные здесь комментарии с номерами строк помогут сопоставить код с приведенным далее описанием):

class Program {

static string[] eTypes = { none , simple , index , nested index };

static void Main(string[] args)

foreach (string еТуре in eTypes) {

try {

Console.WriteLine( Main 0 try block reached. ); Строка 23

Достигнут блок try в Main О Console.WriteLine( ThrowException(\ {0}\ ) called. , еТуре); Строка 24

Вызвано ThrowException ThrowException(еТуре);

Console.WriteLine( Main О try block continues. ); Строка 26 Выполнение блока try в Main() продолжается

catch (System.IndexOutOfRangeException e) Строка 28 {

Console.WriteLine ( Main 0 System.IndexOutOfRangeException catch + block reached. Message:\n\ {0}\ , e.Message);

catch Строка 34 {

Console.WriteLine( Main 0 general catch block reached. );

Достигнут общий блок catch в Main()

finally {

Console.WriteLine( Main() finally block reached. );

Достигнут основной блок catch в Main()

Console.WriteLineО;

Console.ReadKey();

static void ThrowException(string exceptionType) {

Console.WriteLine( ThrowException(\ {0}\ ) reached. , exceptionType) ; Строка 4 9

Достигнута функция ThrowException switch (exceptionType) {

case none : Console.WriteLine( Not throwing an exception. );

Исключение не генерируется break; Строка 54



case simple :

Console.WriteLine( Throwing System.Exception. );

Генерируется исключение System.Exception

throw (new System.Exception 0); Строка 57 case index :

Console.WriteLine( Throwing System.IndexOutOfRangeException . );

Генерируется исключение System.IndexOutOfRangeException eTypes[4] = error ; Строка 60 break; case nested index : try Строка 63 {

Console.WriteLine( ThrowException(\ nested index\ ) + try block reached. );

Достигнут блок try в ThrowException Console.WriteLine( ThrowException(\ index\ ) called. );

Вызвана функция ThrowException ThrowException( index ); Строка 68

catch Строка 70

Console.WriteLine( ThrowException(\ nested index\ ) general + catch block reached. );

Достигнут основной блок catch в ThrowException

finally (

Console.WriteLine( ThrowException(\ nested index\ ) finally + block reached. );

Достигнут блок finally в ThrowException

break;

3. Запустите приложение. На рис. 7.22 показан результат, который должен получиться.


Рис. 7.22. Приложение Ch07Ex02 в действии



Описание полученных результатов

у этого приложения в Main () имеется блок try, в котором вызывается функция по имени ThrowException (). Эта функция может генерировать различные исключения, в зависимости от того, с каким из параметров она вызывается:

□ ThrowException ( none ): не выдает исключения;

□ ThrowException ( simple ): генерирует общее исключение;

□ ThrowException ( index ): генерирует исключение System. IndexOutOfRange Exception;

□ ThrowException ( nested index ): содержит свой собственный блок try, внутри которого находится код, вызывающий ThrowException ( index ) для генерации исключения типа System. IndexOutOfRangeException.

Каждый из этих string-параметров хранится в глобальном массиве eTypes, который в цикле проходится в Main () для выполнения вызова ThrowException () по одному разу с каждым возможным параметром. Во время этого цикла на консоль выводятся различные сообщения для информирования о происходящем. Этот код предоставляет замечательную возможность испробовать описанные ранее в главе приемы пошагового выполнения кода. Выполняя данный код по одной строке за раз, можно в точности понять, как он функционирует.

Чтобы сделать это, добавьте новую точку останова (со стандартными свойствами) в строке кода под номером 23, которая выглядит следующим образом:

Console.WriteLine( Main О try block reached. );

Здесь для работы с кодом используются номера строк, в том виде, в каком они представлены в загружаемом коде. Если функция нумерации строк отключена, включите ее, выбрав в меню Tools пункт Options либо выбрав Text Editor С# и перейдя в раздел параметров General). Комментарии были включены в код с цеяыо упрощения.

Запустите приложение в режиме Debug. Практически сразу же программа перейдет в режим Break, а курсор будет находиться в строке 28. Перейдя на вкладку Locals окна мониторинга переменных, вы должны увидеть, что еТуре в настоящий момент имеет значение попе . Воспользуйтесь кнопкой Step Into для выполнения строк 23 и 24 и удостоверьтесь в том, что первая строка текста была действительно выведена на консоль. Далее снова воспользуйтесь кнопкой Step Into для перехода к функции ThrowExpcetion О в строке 25.

После перехода к функции ThrowException () (в строке 49), содержимое окна Locals изменится. еТуре и args покидают область видимости (потому что являются локальными по отношению к Main ()) и вместо них появится локальный аргумент exceptionType тоже, конечно же, со значением попе . Продолжайте щелкать на кнопке Step Into и тогда достигнете оператора switch, который проверит значение exceptionType и выполнит код, выводящий на экран строку Not throwing an exception. При выполнении оператора break (в строке 54) произойдет выход из кода функции и возобновится обработка кода в Main () в строке 26. Поскольку никакого исключения сгенерировано не было, далее продолжится выполнения кода в блоке try.

Затем обработка доходит до блока finally. Щелкните на кнопке Step Into еще несколько раз, чтобы пройти блок finally и первую итерацию цикла foreach. Когда вы в следующий раз дойдете до строки 25, функция ThrowExcetion () будет вызвана с использованием уже другого параметра, а именно - simple. Продолжайте использовать кнопку Step Into для выполнения и, в конце концов, достигнете строки 57:

throw (new System.Exception О) ;



1 ... 56 57 58 [ 59 ] 60 61 62 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика