КАТЕГОРИИ: Архитектура-(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) |
Лекция 7. Обработка исключительных ситуаций
Классы коллекций Классы коллекций делятся на три основных категории: общего назначения, специализированные и ориентированные на побитовую организацию данных. Классы общего назначения можно использовать для хранения объектов любого типа. Битовые предназначены для хранения битовой информации. Коллекции специального назначения разрабатываются для обработки данных конкретного типа. В данной работе рассматриваются только классы коллекций общего назначения. Эти ые и ориентированные на побитовую организациюклассы перечислены в таблице:
Класс ArrayList предназначен для поддержки динамических массивов, которые при необходимости могут увеличиваться или сокращаться. Объект этого класса представляет собой массив переменной длины, элементами которого являются объектные ссылки. Любой объект класса ArrayList создается с некоторым начальным размером. При превышении этого размера коллекция автоматически его увеличивает. В случае удаления объектов массив можно сократить. Класс ArrayList реализует интерфейсы ICollection, IList, IEnumerable и ICloneable. В классе определены следующие конструкторы:
Помимо методов, определенных в интерфейсах, которые реализует класс ArrayList, в нем определены и собственные методы:
Помимо свойств, определенных в интерфейсах, реализуемых классом ArrayList, в нем также определено свойство Capacity: public virtual int Capacity { get; set; } Оно позволяет узнать или установить емкость вызывающего массива. Емкость – это количество элементов, которые можно сохранить в массиве без его увеличения.
Класс HashTable предназначен для создания коллекции, в которой для хранения объектов используется хеш-таблица. Этотклассреализуетинтерфейсы IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallBack и ICloneable. В классе HashTable определено множество конструкторов, включая следующие (они используются чаще всего):
В классе HashTable помимо методов, определенных в реализуемых им интерфейсах, определены собственные методы. Наиболее употребляемые из них перечислены в таблице:
В классе HashTable, помимо свойств, определенных в реализуемых им интерфейсах, определены два собственных свойства. С их помощью можно из хеш-таблицы получить коллекцию ключей или значений: public virtual ICollection Keys { get; } public virtual ICollection Values { get; } Важно отметить, что HashTable -коллекция не гарантирует сохранения порядка элементов, т.к. хеширование обычно не применяется к отсортированным таблицам.
Класс SortedList предназначен для создания коллекции, которая хранит пары ключ/значение в упорядоченном виде, а именно отсортированы по ключу. Этот класс реализует интерфейсы IDictionary, ICollection, IEnumerable и ICloneable. В классе SortedList определено несколько конструкторов, включая следующие:
В классе SortedList помимо методов, определенных в реализуемых им интерфейсах, также определены собственные методы. Наиболее часто употребляемые из них перечислены в таблице:
В классе SortedList, помимо свойств, определенных в реализуемых им интерфейсах, определены два собственных свойства. Получить предназначенную только для чтения коллекцию ключей или значений, хранимых в SortedList -коллекции, можно с помощью свойств: public virtual ICollection Keys { get; } public virtual ICollection Values { get; }
Класс коллекции, предназначенный для поддержки стека, называется Stack. Он реализует интерфейсы ICollection, IEnumerable и ICloneable. Стек – это динамическая коллекция, которая при необходимости увеличивается, чтобы принять для хранения новые элементы, причем каждый раз, когда стек должен расшириться, его емкость удваивается. В классе Stack определены следующие конструкторы:
Помимо методов, определенных в интерфейсах, которые реализует класс Stack, в нем определены собственные методы, перечисленные в таблице:
Класс коллекции, предназначенный для поддержки очереди, называется Queue. Он реализует интерфейсы ICollection, IEnumerable и ICloneable. Очередь – это динамическая коллекция, которая при необходимости увеличивается, чтобы принять для хранения новые элементы, причем каждый раз, когда такая необходимость возникает, текущий размер очереди умножается на коэффициент роста, который по умолчания равен значению 2,0. В классе Queue определены следующие конструкторы:
Помимо методов, определенных в интерфейсах, которые реализует класс Queue, в нем определены также собственные методы, перечисленные в таблице.
Исключительная ситуация (или исключение) — это ошибка, которая возникает во время выполнения программы. Используя С#- подсистему обработки исключительных ситуаций, с такими ошибками можно справляться. Эта подсистема в С# включает в себя усовершенствованные методы, используемые в языках C++ и Java. Обработка исключений в С# отличается ясностью и полнотой реализации. Преимущество подсистемы обработки исключений состоит в автоматизации создания большей части кода, который ранее необходимо было вводить в программы "вручную". Например, в любом компьютерном языке при отсутствии такой подсистемы практически каждый метод возвращал коды ошибок, и эти значения проверялись вручную при каждом вызове метода. Такой подход довольно утомителен, кроме того, при этом возможно возникновение ошибок. Обработка исключений упрощает "работу над ошибками", позволяя в программах определять блок кода, именуемый обработчиком исключении, который будет автоматически выполняться при возникновении определенной ошибки. В этом случае не обязательно проверять результат выполнения каждой конкретной операции или метода вручную. Если ошибка возникнет, ее должным образом обработает обработчик исключений. Еще одним преимуществом обработки исключительных ситуаций в С# является определение стандартных исключений для таких распространенных программных ошибок, как деление на нуль или попадание вне диапазона определения индекса. Чтобы отреагировать на возникновение таких ошибок, программа должна отслеживать и обрабатывать эти исключения.
7.1 Класс System.Exception В С# исключения представляются классами. Все классы исключений должны быть выведены из встроенного класса исключений Exception, который является частью пространства имен System. Таким образом, все исключения — подклассы класса Exception. Изкласса Exception выведеныклассы SystemException и ApplicationException. Они поддерживают две общие категории исключений, определенные в С#: те, которые генерируются С# -системой динамического управления, или общеязыковым средством управления (CommonLanguageRuntime — CLR), и те, которые генерируются прикладными программами. Но ни класс SystemException, ни класс ApplicationException не привносят ничего нового в дополнение к членам класса Exception. Они просто определяют вершины двух различных иерархий классов исключений. С# определяет встроенные исключения, которые выводятся из класса SystemException. Например, при попытке выполнить деление на нуль генерируется исключение класса DivideByZeroException. Вы сможете создавать собственные классы исключений, выводя их из класса ApplicationException.
7.2 Основы обработки исключений Управление С#-механизмом обработки исключений зиждется на четырех ключевых словах: try, catch, throw и finally. Они образуют всзимосвязанную подсистему, в которой использование одного из них предполагает использование другого. Программные инструкции, которые нужно проконтролировать на предмет исключений, помещаются в try - блок. Если исключение возникает в этом блоке, онодает знать о себе выбросом определенного рода информации. Это выброшенное исключение может быть перехвачено программным путем с помощью catch - блока и обработано соответствующим образом. Системные исключения автоматически генерируютсяС#-системой динамического управления. Чтобы сгенерировать исключение вручную,используется ключевое слово throw. Любой код, который должен быть обязательновыполнен при выходе из try-блока, помещается в блок finally.
7.3 Использование try- и catch-блоков
Ядром обработки исключений являются блоки try и catch. Эти ключевые слова работают "в одной связке"; нельзя использовать слово try без catch или catch без try. Вот каков формат записи try/catch-блоков обработки исключений: try { // Блок кода, подлежащий проверке на наличие ошибок. } catch {ExcepType1exOb) { // Обработчик для исключения типа ExcepType1. } catch (ExcepType2 exOb) { // Обработчик для исключения типа ЕхсерТуре2. }… Здесь ЕхсерТуре — это тип сгенерированного исключения. После " выброса " исключение перехватывается соответствующей инструкцией catch, которая его обрабатывает. Из формата записи try/catch-блоков видно, с try-блоком может быть связана не одна, а несколько catch-инструкций. Какая именно из них будет выполнена, определит тип исключения. Другими словами, будет выполнена та catch-инструкция, тип исключения которой совпадает с типом сгенерированного исключения (а все остальные будут проигнорированы). После перехвата исключения параметр ехОb примет его значение. Известно, что попытка индексировать массив за пределами его границ вызывает ошибку нарушения диапазона. В этом случае С#-система динамического управления генерирует исключение типа IndexOutOfRangeException, которое представляет собой стандартное исключение, определенное языком С#. using System; // Демонстрация обработки исключений, class ExcDemo1 { public static void Main() { int[] nums = new int [4]; try {
Дата добавления: 2014-01-06; Просмотров: 574; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |