- •1 Концепция структурного программирования. Причины появления концепции. Модульность и функции. Ограничения на логические конструкции. Использование оператора goto.
- •Теорема о структурном программировании (Теорема Бёма — Якопини)
- •3 Платформа .Net Framework. Многоязыковое программирование. Кроссплатформенность по. Web-ориентированные приложения.
- •Преимущества технологии динамической компиляции
- •5 Построение приложения Windows в интегрированной среде программирования
- •6 Основные типы данных
- •7 Символы и строки. Символы, строки и массивы строк. Операции над строками
- •8 Структура программы на языке c#. Понятие пространства имен. Иерархия пространств имен. Видимость имен.
- •9 Операторы. Основные языка с#. Арифметические и логические операторы. Бинарные и унарные операторы. Составные операторы. Понятие перегрузки операторов.
- •10 Выражения. Приоритет и ассоциативность операторов. Порядок вычисления выражения.
- •11 Преобразования типов. Иерархия численных типов. Явное и неявное преобразование типов. Возможные ошибки.
- •12 Тема: Модификаторы доступа языка c#. Необходимые знания: Назначение и функции модификаторов private, public, protected, internal, protected internal, private protected.
- •13 Выбор вариантов.
- •If (Условие)
- •14 Циклы.
- •15 Классы памяти
- •16 Функции в языке с#
- •17 Массивы. Создание и инициализация. Ссылки на массив. Двухмерные и многомерные массивы. Инициализация массивов. Невыровненные массивы.
- •18 Понятие класса. Определение класса и экземпляр класса. Данные и методы. Ключевое слово partial.
- •19 Создание объекта класса.
- •20 Деструкторы и «сборка мусора». Оператор «new». Резервирование и освобождение памяти. Деструкторы и «сборка мусора».
- •21 Полиморфизм и перегрузка операторов. Перегрузка унарных и бинарных операторов. Семантика перегрузки операторов в с#.
- •Понятие полиморфизма и шаблоны. Назначение и преимущества использования шаблонов. Параметры универсального типа.
- •23 Свойства c# (Понятие инкапсуляции и свойства в c#. Использование ключевых слов «get» и «set». Преимущества использования свойств.)
- •24 Механизм исключений (Назначение исключений. Основные категории исключений. Ключевые слова try, catch и finally, throw.)
- •25 Наследование в c#. Понятие наследования в c#. Механизм наследования. Базовый и производный классы. Наследование и модификаторы доступа.
24 Механизм исключений (Назначение исключений. Основные категории исключений. Ключевые слова try, catch и finally, throw.)
В ходе выполнения программы может возникнуть «аварийная» ситуация.
Исключения (Exceptions) — это тип ошибки, которая происходит при выполнении приложения. Ошибки обычно означают появление неожиданных проблем. Тогда как исключения, обработка которых организована в коде, являются ожидаемыми, они происходят в коде приложений по различным причинам.
Исключения позволяют передать управление из одной части кода в другую часть.
Функции:
Гибкая реакция на аварийные ситуации
Выполнение некоторых завершающих действий
Базовым для всех типов исключений является тип Exception. Этот тип определяет ряд свойств, с помощью которых можно получить информацию об исключении.
Свойства класса Exception
e имя свойства
Data (номер ошибки)
HelpLink (ссылка на подсказку)
InnerException (внутренние исключения – хранит информацию об исключении, которое послужило причиной текущего исключения)
Message – текст сообщения, соответствующий типу исключения
Source – имя сборки или объекта, где возникло исключение
Stack Track – последовательность выводов - возвращает строковое представление стека вызовов, которые привели к возникновению исключения
Target Site – возвращает метод, в котором и было вызвано исключение
Есть более специализированные типы исключений, которые предназначены для обработки каких-то определенных видов исключений:
DivideByZeroException: представляет исключение, которое генерируется при делении на ноль
ArgumentOutOfRangeException: генерируется, если значение аргумента находится вне диапазона допустимых значений
ArgumentException: генерируется, если в метод для параметра передается некорректное значение
IndexOutOfRangeException: генерируется, если индекс элемента массива или коллекции находится вне диапазона допустимых значений, при попытке обращения за пределы массива
InvalidCastException: генерируется при попытке произвести недопустимые преобразования типов
NullReferenceException: генерируется при попытке обращения к объекту, который равен null (то есть, по сути, неопределен)
OverflowException: генерируется при переполнении
ArrayTypeMismatchException: генерируется при несоответствии типов массива
OutofMemoreException: генерируется, если закончилась динамическая память
FileNotFoundException: генерируется при отсутствии файла.
Обработка исключений C# осуществляется следующими ключевыми словами: try, catch, finally и throw.
try
{
Действие, которое может вызвать исключение
}
Возможные ситуации – открытие файла, запись за пределами массива, исчерпание памяти.
catch (Exception e) (e – имя переменной, может быть любым)
{
Действие, которое необходимо выполнить в случае возникновения исключения
}
Например: MessageBox.Show
• try - применяют для инкапсуляции. В него помещают так называемый «ненадежный» код, который может выдать ошибку. Там могут содержаться вызовы методов, обращения к интерфейсам, операторы цикла. В случае, если некая строка из этого блока выдает исключение, то он обрабатывается в блоке catch
• Когда происходит исключение, запускается блок catch. Здесь исключение можно обработать. Варианты обработки зависят от задач разработчиков и типа ошибки. Например, записать ошибку в лог, завершить работу скрипта или прописать выдачу конкретного сообщения. В случае, если блок catch пустой, программа пропустит исключение.
• Задача блока finally — выполнить определенный код вне зависимости от того, сработало исключение или нет. Это может быть, к примеру, освобождение объекта из памяти. Иногда блок finally не обязателен и опускается. Так происходит, когда обработка исключения предусматривает, что программа дальше будет выполняться.
• В языке C# существует несколько стандартных типов исключений, но есть возможность создавать их самостоятельно. Для этого используют оператор throw.
Обработку разных типов можно разграничить. Для этого каждый тип прописывают в отдельном блоке catch. Здесь важно помнить о приоритетности выполнения, так как предложения catch будут срабатывать в порядке написания.
Используя блоки try, catch и finally сначала выполняются команды в блоке try. Когда исключений нет, программа сразу переходит к блоку finally (если он есть) и часть программы, которая отвечает за обработку исключений, завершается.
Когда в блоке try произошла ошибка, то выполнение программы приостанавливается, а общеязыковая исполняющая среда (CLR) производит поиск блока catch. Если блок найден, то после его выполнения идет блок finally. В другом случае программа аварийно завершит работу.
Например, в случае деления на 0, возникает исключение System.DivideByZeroException. Чтобы не возникало таких ошибок, в блоке catch прописываем инструкцию, как указано в примере кода. Алгоритм не будет делить на 0 и выводить результаты, а программа аварийно завершается.
Пример использования try и catch в C#:
using System;
class MyClient
{
public static void Main()
{
int x = 0;
int div = 0;
try
{
div = 100 / x;
Console.WriteLine("This linein not executed");
}
catch (DivideByZeroException)
{
Console.WriteLine("Exception occured");
}
Console.WriteLine($"Result is {div}");
}
}
Чтобы создать персональное исключение, применяют оператор throw. Использование собственного класса исключений ограничивается лишь фантазией разработчика.
Пример:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
int i = int.Parse(Console.ReadLine());
byte j;
try
{
if (i > 255)
// Генерируем исключение
throw new OverflowException();
else
j = (byte)i;
}
catch (OverflowException)
{
Console.WriteLine("Возникло переполнение");
}
Console.ReadLine();
}
}
}