
- •Введение
- •Создание простого приложения в ms Visual Studio
- •Отладка программы
- •Пошаговый режим
- •Точки останова
- •Безусловные точки останова
- •Условные точки останова
- •Просмотр переменных
- •Стек вызова функций
- •Разработка оконных приложений
- •Размещение компонентов на форме. Свойства компонента.
- •Компонент CheckBoxListBox
- •Переменные
- •Приведение типов
- •Операции, приоритет
- •Перегрузка операций
- •If(выражение_1) оператор_1
- •Циклы While
- •Цикл foreach
- •Программирование классов
- •Введение в классы и объекты в с#
- •Общий синтаксис класса
- •Поля и свойства
- •Использование переменного числа аргументов
- •Объявление объектов класса. Оператор new
- •Инциализация членов класса
- •Конструкторы и деструкторы
- •Ключевое слово this
- •Ключевое слово static
- •Наследование
- •Полиморфизм.
- •Абстрактные классы
- •Интерфейсы
- •Реализация интерфейсов
- •Интерфейсные свойства
- •Интерфейсные индексаторы
- •Массивы
- •Обработка исключительных ситуаций
- •Предварительная проверка параметров
- •Проверка кодов возврата функций и методов
- •Применение механизма исключений
- •Блоки try-catch
- •Применение блока finally
- •Массивы как коллекции
- •Коллекция ArrayList
Применение механизма исключений
Классические схемы обработки ошибок, основанные на проверке допустимости параметров и анализе кодов возврата функций и методов, обладают существенными недостатками.
Практически все современные языки программирования снабжены мощным средством обработки ошибок, основанным на использовании так называемых исключений (exceptions). He является исключением (простите за тавтологию) и язык программирования С#.
Средства обработки исключений в языке С# делают исходный текст программ понятнее и проще. С их помощью программист может организовать структурную обработку ошибок, как прогнозируемых, так и возникающих неожиданно.
Система обработки ошибок, использованная в библиотеке классов Microsoft .NET Framework, работает исключительно с применением механизма исключений. Поэтому, какую бы программу вы ни разрабатывали на языке С#, вы обязательно столкнетесь с необходимостью обрабатывать или вызывать исключения (в других языках программирования это не так; программы C++, например, можно создавать и без обработки исключений).
Блоки try-catch
Для того чтобы организовать в своей программе С# обработку ошибок с использованием исключений, нужно применить блоки, созданные при помощи ключевых слов try, catch и finally. Создание исключения (или, как еще говорят, передачу или возбуждение исключения) выполняют с помощью ключевого слова throw.
В блок try заключается код, который может вызвать возникновение ошибок, т. с. «ненадежный» код. Следом за блоком try может располагаться один или несколько блоков catch, в которых находится код для обработки ошибок.
Рассмотрим пример обработки ошибки деления на нуль с помощью исключений
using System;
namespace DivideByZeroEx
{
class DivByZeroExApp
static void Main(string[] args)
{
int i = 0;
try
{
int j = 5 / i; }
-atch (System. Exception ex) (
Console. WriteLine(
">» Ошибка в программе {0} [{!) ] \n\n{2} " , ex. Source, ex. Mas sage, ex. StackTrace) ; }
Console . ReadLine ( ) ;
}
}
}
Здесь мы заключили в блок try строку программы, при выполнении которой может произойти ошибка деления на нуль:
Try
{
int j = 5 / i;
}
В блоке try может располагаться произвольное количество программных строк, содержащих вызовы методов, обращения к интерфейсам, свойствам и индексаторам, операторы цикла и т. п. При отсутствии ошибок вес эти строки исполняются обычным
Если же в процессе выполнения какой-либо программной строки возникает ошибка, нормальная последовательность работы программы прерывается и управление передается ближайшему блоку catch, расположенному вслед за блоком try. Вот как в нашей программе выглядит блок catch, предназначенный для обработки ошибки деления на нуль:
using System;
namespase DivByZeroEx
{
class DivByZeroExApp
{
static void Main(string[] args)
{
int i = 0;
try
{
int j = 5 / i;
}
catch (System.Exception ex)
{
Console.WriteLine(“>>>Щшибка в программе {0} [{1}]\n\n{2}”)
ex.Sourse, ex.Message, ex.StackTrace);
}
Console.ReadLine();
}
}
}
Здесь мы заключили в блок try строку программы, при выполнении которой может произойти ошибка деления на нуль:
int j = 5 / i;
}
В блоке try может располагаться произвольное количество программных строк, содержащих вызовы методов, обращения к интерфейсам, свойствам и индексаторам, операторы цикла и т. п. При отсутствии ошибок вес эти строки исполняются обычным образом.
Если же в процессе выполнения какой-либо программной строки возникает ошибка, нормальная последовательность работы программы прерывается и управление передается ближайшему блоку catch, расположенному вслед за блоком try. Вот как в нашей программе выглядит блок catch, предназначенный для обработки ошибки деления на нуль:
catch(System.Exception ex) {
Console.WriteLine(“>>>Щшибка в программе {0} [{1}]\n\n{2}”)
ex.Sourse, ex.Message, ex.StackTrace);
В круглых скобках после ключевого слова catch указывается тип (класс) обрабатываемого исключения. В данном случае мы указали базовый класс System.Exception, от которого «происходят» все остальные классы обработки исключений.
Сконструированный таким способом обработчик исключений способен перехватывать исключения всех типов, возникающих при выполнении кода, ограниченного предшествующим блоком try.
Вслед за обозначением класса обрабатываемого исключения мы указали имя переменной ex. Когда блок catch получает управление, эта переменная содержит ссылку на объект класса System-Exception. Свойства этого класса содержат информацию, которая может оказаться полезной при обработке исключения:
• свойство System. Exception . Source содержит название программы, в которой произошло исключение;
• в свойстве Sy stem. Except ion. Message хранится текст сообщения об ошибке;
• свойство System. Except ion. StackTrace содержит точную информацию о том, в каком месте программы произошло исключение.