Глава 9. Обработка исключительных ситуаций
201
который должен выполняться после блока
try...catch
, достаточно
вставить блок
finally
в конце последовательности операторов
try...catch
. Далее приведена общая форма совместного использования
блоков
try...catch
и
finally
:
try
{
// Участок, предназначенный для обработки ошибок
}
catch ()
{
// Обработчик исключения
}
finally {
// Участок завершения обработки исключений:
// закрытие нужных файлов, разрыв соединений и т. п.
}
Блок
finally
будет выполняться всякий раз, когда происходит выход из
блока
try...catch
, независимо от причин, которые к этому привели.
Это означает, что если блок
try
завершается нормально или по причине
исключения, то последним выполняется участок программы, опреде-
ляемый в блоке
finally
. В случае нашего примера в листинге 9.2 после
закрывающей скобки от
catch
можно было бы поставить участок:
finally
{Console.WriteLine("Конец программы");}
Окончательный вид программы представлен в листинге 9.3. Результат
ее работы — на рис. 9.3.
Листинг 9.3
/* Created by SharpDevelop.
* User: user
* Date: 06.12.2012
* Time: 12:32
*
* To change this template use Tools | Options | Coding |
* Edit Standard Headers. */
using System;
namespace app34_exeption
{
class Program
{
static void Main()
202
Часть II. Объектно-ориентированное программирование
{
Console.WriteLine("Ввод строк длиной не более 5 " +
"символов");
int i = (Console.ReadLine().Length);
try
{
if (i > 5)
// Генерируем исключение
throw new Exception(); // OverflowException ();
}
catch (Exception ex) // ExceptionOverflow
{
ex.HelpLink="Micrisoft.com";
Console.WriteLine("Длина строки более 5 " +
"символов");
Console.WriteLine("Message = {0}", ex.Message);
Console.WriteLine("Source = {0}", ex.Source);
Console.WriteLine("StackTrace = {0}",
ex.StackTrace);
Console.WriteLine("TargetSite = {0}",
ex.TargetSite);
Console.WriteLine("HelpLink = {0}", ex.HelpLink);
}
finally
{
Console.WriteLine("Конец программы");
}
Console.ReadLine();
}
}
}
Рис. 9.3.
Обработка исключительной ситуации — результат
ГЛ А В А
10
Интерфейсы
Интерфейс — дословно "сопряжение". В нашем случае это некоторая
программа, обеспечивающая взаимодействие между другими програм-
мами или их частями. В рамках языка С# интерфейсы — это какие-то
абстрактные члены, объединенные под одним именем. Это как бы абст-
рактные классы, но более узкие. Абстрактные классы, кроме абстракт-
ных членов содержат еще конструкторы, поля данных, неабстрактные
члены (члены с реализацией). Интерфейсы содержат только абстракт-
ные члены.
Для чего их ввели в язык? Дело в том, что абстрактные классы позво-
ляют настраивать свои члены только в классах-наследниках (потомках).
Если же у вас в проекте имеется множество несвязанных классовых
иерархий, а вам надо, чтобы в этих иерархиях было бы обращение к
одному и тому же методу, который что-то там делает (в данном случае
говорят: надо, чтобы в иерархиях поддерживался один и тот же поли-
морфный интерфейс), то приходится настраиваться в каждой из таких
иерархий на метод (на абстрактный метод), который находится в про-
граммной сущности под названием "интерфейс". Ваш данный конкрет-
ный класс подключается как бы к этому интерфейсу (по синтаксису это
происходит как и при наследовании: через двоеточие, только вместо
класса родителя пишется конкретный интерфейс, из которого будет за-
имствован необходимый метод). Причем в C# не допускается множест-
венное наследование, т. е. построение класса на основании нескольких
классов, чтобы вытащить из них нужные члены, а "наследование" от
нескольких интерфейсов допускается. Итак, интерфейс — это заголовки
неких абстрактных методов, объединенных под одним именем — име-
нем интерфейса. Например, некий интерфейс
IFILE
может содержать
методы
Fileopen()
,
FileClose()
и др.
204
Do'stlaringiz bilan baham: |