- •Введение в c# и платформу .Net Философия .Net
- •Введение в строительные блоки платформы .Net (clr, cts и cls)
- •Роль библиотек базовых классов
- •Понятие общей системы типов (cts)
- •Понятие общеязыковой спецификации (cls)
- •Понятие общеязыковой исполняющей среды (clr)
- •Различия между сборками, пространствами имен и типами
- •Лабораторная работа №1. Создание приложений на языке c# без использования ide Роль .Net Framework 4.5 sdk
- •Построение приложений c# с использованием csc.Ехе
- •Указание целевых входных и выходных параметров
- •Ссылка на внешние сборки
- •Компиляция нескольких файлов исходного кода
- •Лабораторная работа №2. Построение приложений .Net с помощью Visual Studio Создание нового проекта
- •Использование утилиты Solution Explorer
- •Ссылка на внешние сборки
- •Утилита Object Browser
- •Фрагменты кода и технология Surround With
- •Утилита Class Designer
- •Лабораторная работа №3. Основы программирования на c# Структура простой программы c#
- •Класс System.Console
- •Форматирование числовых данных
- •Системные типы данных и соответствующие ключевые слова c#
- •Объявление и инициализация переменных
- •Иерархия классов для типов данных
- •Члены числовых типов данных
- •Члены System.Boolean
- •Члены System.Char
- •Работа со строковыми данными
- •Базовые манипуляции строками
- •Управляющие последовательности
- •Итерационные конструкции c#
- •Лабораторная работа №4. Главные конструкции программирования на с# Методы и модификаторы параметров
- •Стандартное поведение передачи параметров по значению
- •Модификатор out
- •Модификатор ref
- •Модификатор params
- •Определение необязательных параметров
- •Вызов методов с использованием именованных параметров
- •Массивы в c# Объявление и инициализация массивов
- •Определение массива объектов
- •Базовый класс System.Array
- •Управление хранилищем, лежащим в основе перечисления
- •Объявление переменных типа перечисления
- •Динамическое извлечение пар “имя/значение” перечисления
- •Типы структур
- •Объектно- ориентированное программирование на c# Лабораторная работа №5. Работа с классами Знакомство с типом класса c#
- •Размещение объектов с помощью ключевого слова new
- •Определение специальных конструкторов
- •Роль ключевого слова this
- •Еще раз о необязательных аргументах
- •Понятие ключевого слова static
- •Определение статических полей данных
- •Определение статических классов
- •Основные принципы объектно-ориентированного программирования
- •Роль инкапсуляции
- •Роль наследования
- •Роль полиморфизма
- •Лабораторная работа №6. Инкапсуляция Модификаторы доступа c#
- •Стандартные модификаторы доступа
- •Первый принцип: службы инкапсуляции c#
- •Инкапсуляция с использованием традиционных методов доступа и изменения
- •Использование свойств внутри определения класса
- •Свойства, доступные только для чтения и только для записи
- •Взаимодействие с автоматическими свойствами
- •Понятие синтаксиса инициализации объектов
- •Работа с данными константных полей
- •Понятие полей, допускающих только чтение
- •Понятие частичных типов
- •Лабораторная работа №7. Наследование Базовый механизм наследования
- •Указание родительского класса для существующего класса
- •Ключевое слово sealed
- •Управление созданием базового класса с помощью ключевого слова base
- •Хранение секретов семейства: ключевое слово protected
- •Добавление запечатанного класса
- •Реализация модели включения/делегации
- •Определения вложенных типов
- •Лабораторная работа №8. Полиморфизм
- •Переопределение виртуальных членов в ide-среде Visual Studio
- •Запечатывание виртуальных членов
- •Абстрактные классы
- •Понятие полиморфного интерфейса
- •Сокрытие членов
- •Правила приведения к базовому и производному классу
- •Ключевое слово as
- •Ключевое слово is
- •Главный родительский класс System.Object
- •Переопределение System.Object.ToString()
- •Переопределение System.Object.Equals()
- •Статические члены System.Object
- •Лабораторная работа №9. Структурированная обработка исключений
- •Роль обработки исключений .Net
- •Строительные блоки обработки исключений в .Net
- •Базовый класс System.Exception
- •Простейший пример
- •Генерация общего исключения
- •Перехват исключений
- •Конфигурирование состояния исключения
- •Исключения уровня приложения (System.ApplicationException)
- •Построение специальных исключений, способ первый
- •Построение специальных исключений, способ второй
- •Обработка нескольких исключений
- •Общие операторы catch
- •Внутренние исключения
- •Какие исключения могут генерировать методы?
- •Результат наличия необработанных исключений
- •Лабораторная работа №10. Работа с интерфейсами Понятие интерфейсных типов
- •Реализация интерфейса
- •Вызов членов интерфейса на уровне объектов
- •Получение ссылок на интерфейсы: ключевое слово as
- •Получение ссылок на интерфейсы: ключевое слово is
- •Использование интерфейсов в качестве параметров
- •Использование интерфейсов в качестве возвращаемых значений
- •Массивы интерфейсных типов
- •Явная реализация интерфейсов
- •Проектирование иерархий интерфейсов
- •Множественное наследование посредством интерфейсных типов
Генерация общего исключения
Теперь, когда имеется функциональный класс Саr, рассмотрим простейший способ генерации исключения. Текущая реализация Accelerate() просто отображает сообщение об ошибке, если вызывающий код пытается разогнать автомобиль до скорости, превышающей максимальный предел. Для модернизации этого метода так, чтобы когда пользователь попытался разогнать автомобиль до скорости, превышающий установленный предел, генерировалось исключение, потребуется создать и сконфигурировать новый экземпляр класса System.Exception, установив значение доступного только для чтения свойства Message через конструктор класса. Для отправки объекта ошибки обратно вызывающему коду применяется ключевое слово throw языка С#. Ниже приведен код модифицированного метода Accelerate().
Прежде чем переходить к рассмотрению перехвата данного исключения в вызывающем коде, необходимо отметить несколько интересных моментов. Прежде всего, если вы генерируете исключение, то всегда самостоятельно решаете, как в точности будет выглядеть ошибка и когда онадолжна выдаваться. В рассматриваемом примере предполагается, что при попытке увеличить скорость автомобиля (объекта Саr), который уже вышел из строя, должен быть сгенерирован объект System.Exception для уведомления о том, что выполнение метода Accelerate() не может быть продолжено (в зависимости от создаваемого приложения такое предположение может оказаться как подходящим, так и нет). По большому счету, исключения должны генерироваться только в случае возникновения более критичных условий (например, отсутствие нужного файла, невозможность подключения к базе данных и т.п.). Принятие решения о том, что должно служить причиной генерации исключения, требует серьезного продумывания и поиска веских оснований на стадии проектирования. Для преследуемых сейчас целей будем считать, что попытка увеличить скорость неисправного автомобиля является вполне оправданной причиной для выдачи исключения. Добавьте в класс исключение
Перехват исключений
Поскольку
теперь метод Accelerate() способен
генерировать исключение, вызывающий
код должен быть готов обработать
его, если оно вдруг возникнет. При
вызове метода, который может генерировать
исключение, должен использоваться
блок try/catch. После перехвата объекта
исключения можно обращаться к различным
его членам и извлекать детальную
информацию о проблеме.
Что делать
с этими деталями дальше в основном
зависит от вас. Может быть решено
зафиксировать их в специальном файле
отчета, записать в журнал событий
Windows, отправить по электронной почте
системному администратору или
отобразить конечному пользователю.
Для простоты мы выведем детали исключения
в окне консоли.
По сути,
блок try представляет собой раздел
операторов, которые в ходе выполнения
могут генерировать исключение. Если
исключение обнаруживается, управление
переходит к соответствующему блоку
catch. С другой стороны, в случае, если
код внутри блока try не приводит к
генерации исключения, блок catch полностью
пропускается, и все проходит гладко.
Ниже представлен вывод в результате
тестового запуска данной программы.
Как здесь видно, после обработки исключения приложение может продолжать свою работу с оператора, который находится сразу после блока catch. В некоторых случаях исключение может оказаться достаточно серьезным и стать причиной для завершения работы приложения. Однако часто логика внутри обработчика исключений позволяет приложению спокойно продолжить работу (хотя, возможно, с меньшим объемом функциональности, например, без возможности подключения к удаленному источнику данных). Внедрите в проект обработку исключения
