рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

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

Основы обработки исключений - раздел Программирование, Объектно-ориентированное программирование как идеология программирования и как технология. Достоинства и недостатки Управление С#-Механизмом Обработки Исключений Зиждется На Четырех Ключевых Сл...

Управление С#-механизмом обработки исключений зиждется на четырех ключевых словах: try, catch, throw и finally. Они образуют взаимосвязанную подсистему, в которой использование одного из них предполагает использование другого. Программные инструкции, которые нужно проконтролировать на предмет исключений, помещаются в try-блок. Если исключение таки возникает в этом блоке, оно дает знать о себе выбросом определенного рода информации. Это выброшенное исключение может быть перехвачено программным путем с помощью catch-блока и обработано соответствующим образом. Системные исключения автоматически генерируются С#-системой динамического управления. Чтобы сгенерировать исключение вручную, используется ключевое слово throw. Любой код, который должен быть обязательно выполнен при выходе из try-блока, помещается в блок finally.

Ядром обработки исключений являются блоки try и catch. Эти ключевые слова работают "в одной связке"; нельзя использовать слово try без catch или catch без try. Вот каков формат записи try/catch-блоков обработки исключений:

t r y { // Блок кода, подлежащий проверке на наличие ошибок. }

catch (ExcepType1 exOb) {// Обработчик для исключения типа ExcepTypel. }

catch (ExcepType2 exOb) { // Обработчик для исключения типа ЕхсерТуре2. }

Здесь ЕхсерТуре — это тип сгенерированного исключения. После "выброса" исключение перехватывается соответствующей инструкцией catch, которая его обрабатывает. Как видно из формата записи try/catch-блоков, с try-блоком может быть связана не одна, а несколько catch-инструкций. Какая именно из них будет выполнена, определит тип исключения. Другими словами, будет выполнена та catch-инструкция, тип исключения которой совпадает с типом сгенерированного исключения (а все остальные будут проигнорированы). После перехвата исключения параметр ехОЬ примет его значение.

Задавать параметр ехОЬ необязательно. Если обработчику исключения не нужен доступ к объекту исключения (как это часто бывает), в задании параметра ехОЪ нет необходимости. Если исключение не генерируется, try-блок завершается нормально, и все его catch-инструкции игнорируются. Выполнение программы продолжается с первой инструкции, которая стоит после последней инструкции catch. Таким образом, catch-инструкция (из предложенных после try-блока) выполняется только в случае, если сгенерировано соответствующее исключение.

Пример обработки исключения

Известно, что попытка индексировать массив за пределами его границ вызывает ошибку нарушения диапазона. В этом случае С#-система динамического управления генерирует исключение типа IndexOutOfRangeException, которое представляет собой стандартное исключение, определенное языком С#. Демонстрация обработки исключений:

int [ ] nums = new int [ 4 ] ;

try { // Генерируем исключение, связанное с попаданием индекса вне диапазона

for(int i=0; i < 10; i++) { nums[i] = i; } }

catch (IndexOutOfRangeException) {// Перехватываем исключение.

Console.WriteLine("Индекс вне диапазона!"); }

Обратите внимание на то, что nums — это int-массив для хранения четырех элементов. Однако в цикле for делается попытка индексировать этот массив от 0 до 9, и как только значение индекса устанавливается равным четырем, генерируется исключение типа IndexOutOfRangeException.

Во-первых, проверяемый код содержится внутри try-блока. Во-вторых, при возникновении исключения (в данном случае из-за попытки внутри for-цикла индексировать массив nums за границами его диапазона) выполнение try-блока прекращается, а само исключение перехватывается catch-инструкцией. Другими словами, управление программой передается catch-инструкции, независимо от того, все ли инструкции try-блока выполнились. При этом важно то, что инструкция catch не вызывается, а ей передается управление программой.

После выполнения catch-инструкции программа продолжится со следующей инструкции. Следовательно, чтобы ваша программа могла нормально продолжить свое выполнение, обработчик должен устранить проблему, которая стала причиной возникновения исключительной ситуации.

В инструкции catch параметр отсутствует, параметр необходим только в тех случаях, когда требуется доступ к объекту исключения. В некоторых случаях значение объекта исключения используется обработчиком для получения дополнительной информации об ошибке, но чаще всего достаточно просто знать о том, что исключение имело место. Следовательно, в отсутствии catch-параметра в обработчике исключения нет ничего необычного.

Однако можно сгенерировать исключение вручную, используя инструкцию throw. Формат ее записан таков:

throw exceptOb;

Элемент exceptOb — это объект класса исключений, производного от класса Exception.

Пример генерирование исключения вручную:

try {Console.WriteLine("До генерирования исключения.");

throw new DivideByZeroException(); }

catch (DivideByZeroException) {// Перехватываем исключение.

Console.WriteLine("Исключение перехвачено."); }

Объект исключения типа DivideByZeroException был создан с помощью оператора new в инструкции throw. Инструкция throw генерирует объект.

Иногда возникает потребность определить программный блок, который должен выполняться по выходу из try/catch-блока. Например, исключение может вызвать ошибку, которая завершает текущий метод и, следовательно, является причиной преждевременного возврата. Однако такой метод может оставить открытым файл или соединение с сетью, которые необходимо закрыть. Подобные обстоятельства — обычное явление в программировании, и С# предоставляет удобный путь выхода из них: блок finally.

Чтобы определить блок кода, подлежащий выполнению по выходу из try/catch-блока, включите в конец try/catch-последовательности блок finally. Общая форма записи последовательности try/catch-блоков, содержащей блок finally, выглядит следующим образом:

try {// Блок кода, предназначенный для обработки ошибок. }

catch (ExcepTypel exOb) { //Обработчик для исключения типа ExcepTypel. }

catch (ЕхсерТуре2 ехОЬ) { // Обработчик для исключения типа ЕхсерТуре2. }

finally {// Код завершения обработки исключений.}

Блок finally будет выполнен после выхода из try/catch-блока, независимо от условий его выполнения. Другими словами, при нормальном завершении try-блока или в условиях возникновения исключения содержимое finally-блока будет безусловно отработано. Блок finally выполнится и в том случае, если любой код внутри try-блока или любая из его catch-инструкций определены внутри метода.

18.Интерфейсы. Функциональное назначение. Иерархия интерфейсов. Множественное наследование: проблемы и способы их разрешения.

В объектно-ориентированном программировании иногда требуется определить, что класс должен делать, а не как он будет это делать. Интерфейс определяет набор методов, которые будут реализованы классом. Сам интерфейс не реализует методы. Таким образом, интерфейс — это логическая конструкция, которая описывает методы, не устанавливая жестко способ их реализации. Интерфейсы синтаксически подобны абстрактным классам. Однако в интерфейсе ни один метод не может включать тело, т.е. интерфейс в принципе не предусматривает какой бы то ни было реализации. Он определяет, что должно быть сделано, но не уточняет, как. Если интерфейс определен, его может реализовать любое количество классов. При этом один класс может реализовать любое число интерфейсов. Для реализации интерфейса класс должен обеспечить тела (способы реализации) методов, описанных в интерфейсе. Каждый класс может определить собственную реализацию. Таким образом, два класса могут реализовать один и тот же интерфейс различными способами, но все классы поддерживают одинаковый набор методов. Следовательно, код, "осведомленный" о наличии интерфейса, может использовать объекты любого класса, поскольку интерфейс для всех объектов одинаков. Предоставляя программистам возможность применения такого средства программирования, как интерфейс, С# позволяет в полной мере использовать аспект полиморфизма, выражаемый как "один интерфейс — много методов".

Интерфейсы объявляются с помощью ключевого слова interface:

interface имя{ тип_возврата имя_метода1 {список_параметров) ;

тип_возврата имя_метода2 {список_параметров) ; }

Методы, по сути, — абстрактные. Как упоминалось выше, для методов в интерфейсе не предусмотрены способы реализации. Следовательно, каждый класс, который включает интерфейс, должен реализовать все его методы. В интерфейсе методы неявно являются открытыми (public-методами), при этом не разрешается явным образом указывать спецификатор доступа. Пример интерфейса для класса, который генерирует ряд чисел.

public interface ISeries { int getNext(); // Возвращает следующее число ряда,

void reset (); // Выполняет перезапуск,

void setStart(int x) ; // Устанавливает начальное }

Интерфейсы не могут иметь членов данных. Они не могут определять конструкторы, деструкторы или операторные методы. Кроме того, ни один член интерфейса не может быть объявлен статическим.

– Конец работы –

Эта тема принадлежит разделу:

Объектно-ориентированное программирование как идеология программирования и как технология. Достоинства и недостатки

Класс это шаблон который определяет форму объекта Он задает как данные так и код который оперирует этими данными Объекты это экземпляры... Объявление объекта типа Building... Building house new Building...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Основы обработки исключений

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Объектно-ориентированное программирование как идеология программирования и как технология. Достоинства и недостатки.
Язык С# — это очередная ступень бесконечной эволюции языков программирования. Его создание вызвано процессом усовершенствования и адаптации, который определял разработку компьютерных языков в течен

Ссылка на самого себя
В C# зарезервированное слово this используется для ссылки на текущий объект. Необходимость такого слова связана в основном с разрешением конфликта имен в конструкторах. Конечно, избежать конфликта

Конструкторы и деструкторы. Функциональное назначение. Виды конструкторов.
Конструктор — неотъемлемый компонент класса. Нет классов без конструкторов. Конструктор представляет собой специальный метод класса, позволяющий создавать объекты класса. Одна из с

Объекты и их жизненный цикл. Создание и уничтожение объектов.
В объектно-ориентированном языке при связывании кода и данных создается объект. Код, данные или обе эти составляющие объекта могут быть закрытыми внутри него или открытыми. Закрытый код или закрыты

Наследование. Конструктор по умолчанию. Назначение.
Насле́дование— механизм объектно-ориентированного программирования позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и фу

Реализация интерфейсов
Итак, если интерфейс определен, один или несколько классов могут его реализовать. Чтобы реализовать интерфейс, нужно указать его имя после имени класса подобно тому, как при создании производного у

Коллизия имен
Проблема коллизии имен возникает, когда два или более интерфейса имеют методы с одинаковыми именами и сигнатурой. Если имена методов совпадают, но сигнатуры разные, то это не приводит к конфликтам

Наследование от общего предка
Проблема наследования от общего предка характерна, в первую очередь, для множественного наследования классов. Если класс C является наследником классов A и B, а те, в свой черед, являются наследник

Концепция типа данных. Соглашения о совместимости и приведение типов
Концепция типов данных состоит в том, что каждой информации приписывается тип, который описывается: 1) множеством допустимых значений типа, 2) набором операций дл

Концепция типа данных. Числовые типы данных.
Концепция типов данных состоит в том, что каждой информации приписывается тип, который описывается: 1) множеством допустимых значений типа, 2) набором операций дл

Концепция типа данных. Символьные типы данных.
Концепция типов данных состоит в том, что каждой информации приписывается тип, который описывается: 1) множеством допустимых значений типа, 2) набором операций дл

Структуры
public struct Book { public decimal price; public string title; public string author; } Классы — это ссылочные типы. Это означает, что к объект

Концепция типа данных. Явное и неявное преобразование типов.
Концепция типов данных состоит в том, что каждой информации приписывается тип, который описывается: 1) множеством допустимых значений типа, 2) набором операций дл

Концепция типа данных. Значащие (размерные) (Value type) и ссылочные (Reference type) типы данных. Упаковка и распаковка (Boxing, Unboxing).
Концепция типов данных состоит в том, что каждой информации приписывается тип, который описывается: 1) множеством допустимых значений типа, 2) набором операций дл

Принцип модульности программ. Глобальные и локальные имена. Область видимости имен. Выбор области видимости.
У класса две различные роли: модуля и типа данных. Класс — это модуль, архитектурная единица построения программной системы. Модульность построения — основное свойство программных систем. В ООП про

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги