|
Программирование >> Программирование с использованием ajax
Обработка исключений 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 О) ;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |