Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тюмгу / Лекции КБ ИБАС 1 курс 2 семестр / лекция15 Безопасность 2018.pptx
Скачиваний:
11
Добавлен:
08.12.2019
Размер:
351.87 Кб
Скачать

Пример упаковки

значения типа int:

Console.WriteLine(123.ToString ( ));

Пример упаковки и распаковки:

int x;

object obj;

obj = x; // упаковка

int y = (int) obj; // распаковка

11

Для чего можно явно применять механизм упаковки – распаковки?

1.Можно объявить массив типа object и хранить в его элементах величины

любого типа, которые при необходимости можно

распаковать.

2. Можно использовать тип object и для

формальных параметров в методах.

Тогда такому методу можно передать

аргумент любого типа,

как ссылочного, так и значения.

12

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

При выполнении программы могут возникнуть особые условия:

деление на ноль,

недопустимое приведение типа,

обращение к несуществующему файлу,

выход за пределы памяти и др.

В этом случае генерируется исключение.

Генерировать исключение может программист

в зависимости от того, какую ситуацию он считает исключительной.

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

сохраняет работоспособность программы

помогает выделить функциональную часть алгоритма,

без проверки всевозможных условий,

описания реакций на разные случаи.

13

Класс System.Exception и его потомки

В C# определенные исключения представлены классами - наследниками встроенного класса исключений System.Exception.

Exception - базовый

для двух классов исключений:

SystemException - исключения, образованные средой исполнения CLR,

ApplicationException - исключения, сгенерированные приложениями.

Эти классы не добавляют ничего в наследуемый класс.

НО это корни двух различных иерархий исключений.

14

Методы обработки исключений

Блоки try и catch

Для обработки исключений в С# используются блоки try и catch.

Одному блоку try может соответствовать несколько блоков catch.

Синтаксис :

try

{

// код, для которого предусмотрена обработка искл. ситуации

}

catch (Exc_type1 eObj)

{

// обработчик исключений класса Exc_type1

}

catch (Exc_type2 eObj)

{

// обработчик исключений класса Exc_type2

}

15

Выполнение программы происходит по следующему алгоритму:

Выполняются операторы блока try.

Если в каком то из них возникла исключительная ситуация,

то перехват исключения возможен тем блоком catch, в котором указан соответствующий класс исключений Exc_type.

В случае перехвата

объект получает значение соответствующего исключения и

выполняются операторы данного блока.

Если объект при обработке исключения не используется,

можно его опустить, указав только класс исключений.

Примечание. Если исключительная ситуация не возникла, то после выполнения всех операторов блока try управление передается оператору, расположенному после последнего блока catch.

16

Пример 1. Обработка явно предусмотренного исключения IndexOutOfRangeException – выход индекса за границы.

using System;

class Demo

{

public static void Main ( )

{

int [ ] my_arr = new int [5];

try

{

// генерируем исключение

my_arr [10] = 123;

Console.WriteLine (“этот оператор не выполнится”);

}

catch (IndexOutOfRangeException)

{

// перехват исключения

Console.WriteLine (“индекс за границами диапазона”);

}

Console.WriteLine (“вышли из блока catch”);

}

}

17

Последовательность перехвата исключений в цепочке методов

На предмет наличия исключений контролируется весь код, входящий в блок try.

То есть, если внутри этого блока вызываются какие-либо методы, не имеющие своих обработчиков исключений, то их сможет обработать вызывающий метод.

Алгоритм (на примере двух методов):

исключительная ситуация возникла в методе Met2, вызванном из Met1,

который, в свою очередь, вызван из Main;

если в Met2 есть обработчик,

то он и выполняет обработку;

иначе выполнение Met2 прерывается, происходит возврат в Met1, где ищется обработчик;

18

если обработка этого исключения предусмотрена в Met1,

то она выполняется;

иначе управление (вместе с исключением) передается Main, где ищется обработчик;

если он есть,

то выполняется;

иначе исключение перехватывается системой выполнения C# и

передается обработчику по умолчанию, который

выдает стандартное сообщение об

ошибке и

завершает выполнение программы.

19

Пример 2. Иллюстрация алгоритма - исключение будет генерироваться одним методом, а обрабатываться – другим:

using System;

class Test_Exc

{

public static void GenExc ( )

{

int [ ] my_arr = new int [5];

// генерируем исключение

my_arr [10] = 123;

Console.WriteLine (“этот оператор не выполнится”);

}

}

20