Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Последствия «не перехвата» исключенийСодержание книги
Поиск на нашем сайте
Перехват одного из стандартных исключений, как в приведенном выше примере, даёт ещё одно преимущество: он исключает аварийное завершение программы. Как только исключение будет сгенерировано, оно должно быть перехвачено каким-то фрагментом кода в определенном месте программы. Вообще говоря, если исключение не перехватывается в программе, то оно будет перехвачено исполняющей системой. Но дело в том, что исполняющая система выдаст сообщение об ошибке и прервёт выполнение программы. Например, если убрать из предыдущего примера исключение FormatException, то при вводе некорректной строки, IDE-среда Visual Studio 2010 выдаст предупреждающее сообщение:
Рис. 3. 1. Сгенерированное исключение выловленное средой разработки Visual Studio 2010
Такие сообщения об ошибках полезны для отладки программы, но, по меньше мере, нежелательны при её использовании на практике. Именно поэтому так важно организовать обработку исключительных ситуаций в самой программе.
Класс «Exception» Класс «Exception»
Класс «Exception»
Все определяемые на уровне пользователя и системы исключения в C# в конечном итоге всегда наследуются от базового класса System.Exception, который, в свою очередь, наследуется от класса System.Object. Ниже показано, как в целом выглядит этот (обратим внимание, что некоторые его члены являются виртуальными и, следовательно, могут переопределяться в производных классах):
public class Exception: ISerializable, _Exception { // Общедоступные конструкторы public Exception(string message, Exception innerException); public Exception(string message); public Exception(); //... // Методы public virtual Exception GetBaseException(); public virtual void GetObjectData(Serializationlnfо info, StreamingContext context); // Свойства public virtual IDictionary Data { get; } public virtual string HelpLink (get; set; } public Exception InnerException (get; } public virtual string Message { get; } public virtual string Source { get; set; } public virtual string StackTrace { get; } public MethodBase TargetSite { get; } //... }
Нетрудно заметить, что многие из содержащихся в System.Exception свойств являются по своей природе доступными только для чтения. Это объясняется тем, что для каждого из них значения, используемые по умолчанию, обычно поставляются в производных классах. Например, в производном классе IndexOutOfRangeException поставляется сообщение по умолчанию «Index was outside the bounds of the array» («Индекс вышел за границы массива»).
В следующей таблице приведено краткое описание некоторых наиболее важных свойств класса System.Exception:
Давайте рассмотрим пример:
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace LC_Console { class Program { static int MyDel(int x, int y) { return x / y; }
static void Main() { link1: try { Console.Write("Введите x: "); int x = int.Parse(Console.ReadLine()); Console.Write("Введите y: "); int y = int.Parse(Console.ReadLine());
int result = MyDel(x, y); Console.WriteLine("Результат: " + result); } // Обрабатываем исключение возникающее при делении на ноль catch (DivideByZeroException ex) { Console.WriteLine("Деление на \"0\" зафиксировано.\n"); Console.WriteLine("Ошибка: " + ex.Message + "\n\n"); goto link1; } // Обрабатываем исключение при неккоректном вводе числа в консоль catch (FormatException ex) { Console.WriteLine("Было введено не число.\n"); Console.WriteLine("Ошибка: " + ex.Message + "\n\n"); goto link1; } Console.WriteLine("Для продолжения нажмите любую клавишу..."); Console.ReadKey(); } } }
Рис. 1. 1. Результат работы кода выше
Как видим, в данном примере используется свойство Message, класса Exception, для вывода информации о возникшем исключении.
|
||||||||||||||||||||
Последнее изменение этой страницы: 2016-08-15; просмотров: 371; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.219.44.171 (0.008 с.) |