Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Для того чтобы указать кодовый блок, который должен выполняться после блока try/catch
, достаточно вставить блок finally
в конце последовательности операторов try/catch
. Ниже приведена общая форма совместного использования блоков try/catch
и finally
.
try {
// Блок кода, предназначенный для обработки ошибок.
}
catch (ExcepTypel exOb) {
// Обработчик исключения типа ExcepTypel.
}
.
.
.
catch ( ЕхсерТуре2 ехОb) {
// Обработчик исключения типа ЕхсерТуре2. }
finally {
// Код завершения обработки исключений.
}
Блок finally
будет выполняться всякий раз, когда происходит выход из блока try/catch
, независимо от причин, которые к этому привели. Это означает, что если блок try
завершается нормально или по причине исключения, то последним выполняется код, определяемый в блоке finally
. Блок finally
выполняется и в том случае, если любой код в блоке try
или в связанных с ним блоках catch
приводит к возврату из метода.
Ниже приведен пример применения блока finally
.
// Использовать блок finally.
using System;
class UseFinally {
public static void GenException(int what) {
int t;
int[] nums = new int [2];
Console.WriteLine("Получить " + what);
try {
switch(what) {
case 0:
t = 10 / what; // сгенерировать ошибку из-за деления на нуль
break;
case 1:
nums[4] =4; // сгенерировать ошибку индексирования массива
break;
case 2:
return; // возврат из блока try
}
}
catch (DivideByZeroException) {
Console.WriteLine("Делить на нуль нельзя!");
return; // возврат из блока catch
}
catch (IndexOutOfRangeException) {
Console.WriteLine("Совпадающий элемент не найден.");
}
finally {
Console.WriteLine("После выхода из блока try.");
}
}
}
class FinallyDemo {
static void Main() {
for(int i=0; i < 3; i++) {
UseFinally.GenException(i);
Console.WriteLine() ;
}
}
}
Вот к какому результату приводит выполнение этой программы.
Получить 0
Делить на нуль нельзя
После выхода из блока try.
Получить 1
Совпадающий элемент не найден.
После выхода из блока try.
Получить 2
После выхода из блока try.
Как следует из приведенного выше результата, блок finally
выполняется независимо от причины выхода из блока try
.
И еще одно замечание: с точки зрения синтаксиса блок finally
следует после блока try
, и формально блоки catch
для этого не требуются. Следовательно, блок finally
можно ввести непосредственно после блока try
, опустив блоки catch
. В этом случае блок finally
начнет выполняться сразу же после выхода из блока try
, но исключения обрабатываться не будут.
Подробное рассмотрение класса Exception
В приведенных выше примерах исключения только перехватывались, но никакой существенной обработке они не подвергались. Как пояснялось выше, в операторе catch
допускается указывать тип и переменную исключения. Переменная получает ссылку на объект исключения. Во всех исключениях поддерживаются члены, определенные в классе Exception
, поскольку все исключения являются производными от этого класса. В этом разделе будет рассмотрен ряд наиболее полезных членов и конструкторов класса Exception
и приведены конкретные примеры использования переменной исключения.
В классе Exception
определяется ряд свойств. К числу самых интересных относятся три свойства: Message, StackTrace
и Targetsite
. Все эти свойства доступны только для чтения. Свойство Message
содержит символьную строку, описывающую характер ошибки; свойство StackTrace
— строку с вызовами стека, приведшими к исключительной ситуации, а свойство ТагgetSite
получает объект, обозначающий метод, сгенерировавший исключение.
Кроме того, в классе Exception
определяется ряд методов. Чаще всего приходится пользоваться методом ToString()
, возвращающим символьную строку с описанием исключения. Этот метод автоматически вызывается, например, при отображении исключения с помощью метода WriteLine()
.
Применение всех трех упомянутых выше свойств и метода из класса Exception
демонстрируется в приведенном ниже примере программы.
// Использовать члены класса Exception.
using System;
class ExcTest {
public static void GenException() {
int[] nums = new int [4];
Console.WriteLine("До генерирования исключения.");
// Сгенерировать исключение в связи
//с выходом за границы массива,
for(int i=0; i < 10; i++) {
nums[i] = i;
Console.WriteLine("nums[{0}]: {1}", i, nums[i]);
}
Console.WriteLine("He подлежит выводу");
}
}
class UseExcept {
static void Main() {
try {
ExcTest.GenException();
}
catch (IndexOutOfRangeException exc) {
Console.WriteLine("Стандартное сообщение таково: ");
Console.WriteLine(exc); // вызвать метод ToString()
Console.WriteLine("Свойство StackTrace: " + exc.StackTrace);
Console.WriteLine("Свойство Message: " + exc.Message);
Console.WriteLine("Свойство TargetSite: " + exc.TargetSite);
}
Console.WriteLine("После блока перехвата исключения.");
}
}
При выполнении этой программы получается следующий результат.
До генерирования исключения.
nums[0]: 0
nums[1]: 1
nums[2]: 2
nums[3]: 3
Стандартное сообщение таково: System.IndexOutOfRangeException: Индекс находился
вне границ массива.
в ExcTest.genException() в <���имя_файла >:строка 15
в UseExcept.Main()в <���имя_файла >:строка 29
Интервал:
Закладка: