
- •Структуры
- •Создание структуры
- •Пример создания и инициализации структуры:
- •class Demo
- •Переопределение функций
- •Пример:
- •class MainClass
- •Упаковка и распаковка
- •Обратный процесс извлечения значения из объекта называется
- •Пример упаковки
- •Для чего можно явно применять механизм упаковки – распаковки?
- •Обработка исключений
- •Класс System.Exception и его потомки
- •Методы обработки исключений
- •Выполнение программы происходит по следующему алгоритму:
- •Пример 1. Обработка явно предусмотренного исключения IndexOutOfRangeException – выход индекса за границы.
- •Последовательность перехвата исключений в цепочке методов
- •если обработка этого исключения предусмотрена в Met1,
- •Пример 2. Иллюстрация алгоритма - исключение будет генерироваться одним методом, а обрабатываться –
- •class Demo
- •Обработка повторяющихся исключений
- •Использование нескольких блоков catch
- •Перехват всех возможных исключений
- •Алгоритм обработки исключений :
- •using System;
- •catch (DivideByZeroException)
- •Генерирование исключений
- •Оператор throw используется также для повторной генерации исключений – после того, как соответствующее
- •class Demo
- •Блок finally
- •catch (DivideByZeroException)
- •Класс Exception
- •Пример 8. Иллюстрация использования методов и свойств класса Exception.
- •catch (IndexOutOfRangeException exc_obj)
- •Наследование классов исключений
- •class ClassDemo
- •catch (DivideByZeroException)
- •Перехват исключений наследующего класса
- •Пример 10. Создаются два класса исключений, затем в программе генерируются исключения обоих типов.
- •class ExceptB : ExceptA
- •catch (ExceptB exc_obj)
- •Операторы checked, unchecked
- •Первая форма оператора игнорирует переполнение для указанного выражения, а вторая – для блока

Пример упаковки
значения типа 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