ExpC_Module 11ru_1.ppt
- Количество слайдов: 22
Модуль 11 Обработка исключений
Обзор модуля В этом модуле вы изучите n Исключения n Вызов и перехват исключений n Вложенные блоки try и использование нескольких блоков catch n Пользовательские исключения Изучение C#/ Модуль 11/ 2 из 22
Занятие 1 - Исключения На первом занятии, Исключения, вы изучите: n Понятие исключения. n Описание исключений в C#. n Список часто используемых классов исключений. Изучение C#/ Модуль 11/ 3 из 22
Назначение n n Исключения - ненормальные события, препятствующие успешному выполнению конкретной задачи. Исключения в C# разрушают нормальное течение программы. Изучение C#/ Модуль 11/ 4 из 22
Исключения n n n Исключения - ошибки времени выполнения, которые могут привести к непредвиденному завершению программы. Обработка исключений - процесс обработки таких ошибок времени выполнения. Обработка исключения указывает на действие, которое необходимо выполнить в случае возникновения ошибки, чтобы предотвратить принудительное завершение программы. Изучение C#/ Модуль 11/ 5 из 22
Исключения в C# n n Исключения системного уровня C#Исключения системного уровня вызываются n может обрабатывать различные типы исключений с помощью соответствующих (выбрасываются) системой. выражений обработки исключений. Исключения уровня приложения Это позволяет обрабатывать два основных типа n Исключения уровня приложения вызываются исключений: пользовательскими приложениями. Исключения системного уровня Исключения уровня приложения Изучение C#/ Модуль 11/ 6 из 22
Свойства класса “Exception” n n Класс System. Exception является базовым классом, позволяющим обработку исключений в C#. Класс System. Exception содержит открытые и закрытые методы, наследуемые другими классами исключений. Свойства Описания Message Выводит сообщение с причиной исключения. Source Указывает имя приложения или объекта, вызвавшего исключение. Stack. Trace Указывает содержимое стека в момент возникновения исключения. Inner. Exception Возвращает экземпляр Exception, вызвавший текущее исключение. Изучение C#/ Модуль 11/ 7 из 22
Часто используемые классы исключений n n Класс System. Exception имеет несколько производных классов исключений для обработки различных типов исключений. Иерархия отображает различные классы исключений в пространстве имен System. Изучение C#/ Модуль 11/ 8 из 22
Классы исключений Исключения n Пространство Описания имен System. Описания различные содержит System. Arithmetic. Exception System. Null. Reference. Exception Это исключение вызывается для проблем, присвоить Это поддерживаемыеисключение вызывается при попытке возникающих с в C# классы исключений. значение объекту null. операциями арифметических вычислений, приведения типов System. Out. Of. Memory. Exception System. Argument. Exception или конвертации. Это исключение вызывается, если недостаточно памяти для Это исключение вызывается, когда один из аргументов не размещения объекта. соответствует спецификациям параметра вызванного метода. Это исключение вызывается, если результат операции Это исключение вызывается при попытке сохранения данных арифметических вычислений, приведения типов или в массив, имеющий другой тип данных. конвертации слишком велик, чтобы поместиться в целевой объект или переменную. Это исключение вызывается при попытке деления на ноль. Это исключение вызывается при исчерпании стека, Тип обрабатываемого исключения зависит от указанного класса исключения. n System. Overflow. Exception System. Array. Type. Mismatch. Excep tion System. Divide. By. Zero. Exception System. Stack. Overflow. Exception System. Index. Out. Of. Range. Excepti on System. Data. Exception вызванного слишком большим вложением вызовов методов. Это исключение вызывается при попытке сохранения данных в массив с индексом, меньшим нуля или большим верхней Это исключение вызывается при ошибках использования границы массива. компонентов ADO. NET. System. Invalid. Cast. Exception System. Format. Exception Это исключение вызывается при ошибке явного формата Это исключение вызывается при несоответствии преобразования из базового типапараметра вызванного аргумента формату типа данных или интерфейса в другой тип метода. System. Argument. Null. Exception System. IOException Это исключение вызывается при пустой ссылке, переданной Это исключение вызывается при возникновении ошибок как аргумент для метода, информации с помощью потоков, ввода/вывода доступа к не поддерживающего значений null. и папок. файлов Изучение C#/ Модуль 11/ 9 из 22
Занятие 2 - Вызов и перехват исключений На втором занятии, Вызов и перехват исключений, вы изучите: n Использование блока catch. n Использование выражение throw. n Использование блока finally. Изучение C#/ Модуль 11/ 10 из 22
Назначение обработчиков исключений n n Исключения, возникающие при работе конкретных программ, необходимо перехватывать соответствующими процедурами обработки. Если программа не содержит подходящего обработчика исключения, ее выполнение прерывается. Изучение C#/ Модуль 11/ 11 из 22
Перехват исключений n Обработка Вывод Пример Синтаксис исключений реализуется в C# конструкцией try-catch. using System; Exception caught: System. Divide. By. Zero. Exception: Attempted try class Division. Error { to divide by zero. { Division. Error. Main(String[] args) at // код программы } static void Main(string[] args) n catch[(<Exception. Class> <obj. Exception>)] { { int num. One = 133; // механизм обработки исключения int num. Two = 0; } int result; try где, { n try: Указываетnum. One выражениями, которые могут вызвать result = блок с / num. Two; } исключения. program code: Выражения, которые могут генерировать исключения. catch (Divide. By. Zero. Exception obj. Divide) { catch: Указывает блок с выражениями, которые обрабатывают исключения и выполняют необходимые caught: Console. Write. Line(“Exceptionдействия. “ + obj. Divide); Exception. Class: Имя класса исключения. Является опциональным. } n obj. Exception: Экземпляр конкретного класса исключений. } Может быть пропущен, если пропущен Exception. Class. } Эта конструкция состоит из двух блоков - try и catch. Блок try включает выражения, которые могут вызвать исключения. Блок catch идет за блоком try и может содержать или не содержать параметров. Изучение C#/ Модуль 11/ 12 из 22
Общий блок “catch” n Блок Вывод catch Пример может обрабатывать все типы исключений. using System; Error: System. Index. Out. Of. Range. Exception: Index was outside class Students the array. the bounds of { at Project_New. Exception_Handling. Students. Main(String[] string[] _names = { “James”, “John”, “Alexander” }; n args) in D: Exception HandlingStudents. cs: line 17 static void Main(string[] args) { Students obj. Students = new Students(); try { n obj. Students. _names[4] = “Michael”; } catch (Exception obj. Exception) { Console. Write. Line(“Error: “ + obj. Exception); n } } } Тип обрабатываемого блоком catch исключения зависит от указанного класса исключения. Общий блок catch может обрабатывать все типы исключений. Недостаток общего блока catch в том, что нет экземпляра исключения, так что неясно, какое действие необходимо выполнить для обработки исключения. Изучение C#/ Модуль 11/ 13 из 22
Выражение “throw” n Выражение Вывод Пример Синтаксис throw в C# позволяет программно вызывать using System; Throw Exampleисключения с помощью ключевого слова throw exception. Object; class Employee Exception caught: System. Argument. Null. Exception: Value { throw. static void Throw. Exception(string name) где, cannot be null. { throw: Указывает, что исключение вызывается программно. if (name == null) at Exception_Handling. Employee. Throw. Exception(String { exception. Object: Экземпляр конкретного класса name) inthrow new Argument. Null. Exception(); D: Exception HandlingEmployee. cs: n line 13 Выражение throw принимает экземпляр } исключений. . } at static void Main(string [] args) Exception_Handling. Employee. Main(String[] args) in конкретного исключения в качестве параметра. { D: Exception HandlingEmployee. cs: line 24 Console. Write. Line(“Throw Example”); try { Throw. Exception(emp. Name); При} вызове исключения с помощью ключевого catch (Argument. Null. Exception obj. Null) слова throw, исключение обрабатывается блоком { Console. Write. Line(“Exception caught: “ +obj. Null); catch. } string emp. Name = null; n } } Изучение C#/ Модуль 11/ 14 из 22
Выражение “finally” n Бывает Пример Синтаксис Вывод необходимо выполнить ряд инструкций usingвне зависимости от того, возникло исключение System; finally Exception caught: System. Divide. By. Zero. Exception: Attempted class Division. Error { или нет. В этих случаях используется блок to divide by zero. { // Division. Error. Main(String[] args) at static void Main(string[] args) завершающий код {finally. } This finally block will always be executed int num. One = 133; где, n int num. Two = 0; int result; try finally: Указывает, что выражения в блоке должны быть { result = num. One / num. Two; выполнены вне зависимости от того, произошло исключение } catch (Divide. By. Zero. Exception obj. Divide) { Console. Write. Line(“Exception caught: “ + obj. Divide); } finally { Console. Write. Line(“This finally block will always be executed”); } Блок finally является опциональным и должен или нет. находиться после блока catch. Он содержит выражения, выполняемые вне зависимости от факта возникновения исключения. n } } Изучение C#/ Модуль 11/ 15 из 22
Занятие 3 - Вложенные блоки try и несколько блоков catch На третьем занятии, Вложенные блоки try и несколько блоков catch , вы изучите: n Описание вложенных блоковtry. Описание использования нескольких блоков catch. n Изучение C#/ Модуль 11/ 16 из 22
Вложенные блоки “try” n Вложенные Пример Синтаксис блоки try состоят из нескольких конструкций try-catch. static void Main(string[] args) try { { n n // внешний namestry {“John”, “James”}; string[] блок = try num. One = 0; int { int result; // внутренний блок try } { catch Console. Write. Line(“This is the outer try block”); { try // внутренний блок catch } { //Является опциональным. / num. One; result = 133 finally } { catch (Arithmetic. Exception obj. Maths) // внутренний блок finally { } Вложенный блок try начинается с блока try, называемого внешним блоком try. Внешний блок try содержит несколько блоков try, называемых внутренними блоками try. Console. Write. Line(“Divide by 0 “ + obj. Maths); } } catch names[2] = “Smith”; { } // Внешний блок catch } catch (Index. Out. Of. Range. Exception obj. Index) //Является опциональным. { finally Console. Write. Line(“Wrong number of arguments supplied ” + obj. Index); { } // внешний блок finally } } Изучение C#/ Модуль 11/ 17 из 22
Несколько блоков “catch” n Блок try Пример Синтаксис может вызывать несколько типов исключений, необходимых для обработки блоком try {catch. static void Main(string[] args) { string[] names = { “John”, “James” }; int num. One = 10; int result = 0; int index = 0; try { index = 3; names[index] = “Smith”; result = 130 / num. One; } catch (Divide. By. Zero. Exception obj. Divide) { Console. Write. Line(“Divide by 0 “ + obj. Divide); } catch (Index. Out. Of. Range. Exception obj. Index) { Console. Write. Line(“Wrong number of arguments supplied “ + obj. Index); } catch (Exception obj. Exception) { Console. Write. Line(“Error: “ + obj. Exception); } Console. Write. Line(result); } // код программы } catch (<Exception. Class> <obj. Exception>) n C# позволяет определять несколько блоков catch { // выражения для обработки типов исключений, для обработки различных исключения } вызываемых блоком try. catch (<Exception. Class 1> <obj. Exception>) { // выражения для обработки исключения n }В зависимости от типа исключения, вызываемого. . . блоком try, выполняется соответствующий (если есть) блок catch. Изучение C#/ Модуль 11/ 18 из 22
Пользовательские исключения На последнем занятии, Пользовательские исключения, вы изучите: n Описание пользовательских исключений и их назначение. n Объяснение реализации пользовательских исключений. Изучение C#/ Модуль 11/ 19 из 22
Пользовательские исключения n n n Эти исключения позволяют распознавать случаи неожиданных событий в заданных программах и выводить пользовательские сообщения. Они позволяют упрощать и улучшать процесс обработки ошибок в программе. Они могут быть созданы для обработки исключений, вызываемых CLR так же, как и вызванных пользовательскими приложениями. Изучение C#/ Модуль 11/ 20 из 22
Реализация пользовательских исключений n n n Пользовательские Вывод Пример исключения могут быть созданы наследованием от класса Exception, класса public illustrates : Exception This class Custom. Message creation and catching of custom { exception System. Exception или класса public Custom. Message (string message) : base(message) { Application. Exception. } } public class Custom. Exception { static void Main(string[] args) { try { throw new Custom. Message (“This illustrates creation and catching of custom exception”); } catch(Custom. Message obj. Custom) { Console. Write. Line(obj. Custom. Message ); } } } Класс System. Exception обрабатывает исключения от CLR. Класс Application. Exception обрабатывает исключения для пользовательских приложений. Изучение C#/ Модуль 11/ 21 из 22
Резюме n n Исключения - это ошибки времени выполнения. Вызов и перехват исключений n Выражение throw позволяет программно вызывать исключения. Вложенные блоки try и использование нескольких блоков catch n Вложенные блоки try позволяют иметь в блоке try конструкцию try-catch-finally. n Несколько блоков catch могут быть реализованы при возникновении в блоке try нескольких типов исключений. Пользовательские исключения n Пользовательские исключения позволяют обрабатывать системные и специфичные для приложений ошибки времени выполнения. Изучение C#/ Модуль 11/ 22 из 22
ExpC_Module 11ru_1.ppt