ВниМание
Если.вы.—.разработчик.библиотек.классов.и.занимаетесь.созданием.типов,.которые.
будут.использовать.другие.разработчики,.отнеситесь.к.этим.правилам.очень.серьез-
но .На.вас.лежит.огромная.ответственность.за.разработку.интерфейса,.применимого.
к.широкому.спектру.приложений .Помните:.вы.не.знаете.всех.тонкостей.кода,.который.
вызываете.через.делегаты,.а.также.через.виртуальные.или.интерфейсные.методы .
Вы.также.не.знаете,.какой.код.будет.вызывать.вашу.библиотеку .Невозможно.пред-
видеть.все.ситуации,.в.которых.может.применяться.ваш.тип,.поэтому.не.принимайте.
никаких.политических.решений .Ваш.код.не.должен.решать,.что.есть.ошибка,.а.что.
нет.—.оставьте.это.решение.вызывающему.коду
525
Приемы.работы.с.исключениями
Внимательно.следите.за.состоянием.и.старайтесь.избежать.его.повреждения .Про-
веряйте.аргументы,.передаваемые.вашим.методам,.с.помощью.контрактов.(см .
далее.в.этой.главе) .Старайтесь.не.изменять.состояние.без.необходимости,.а.если.
изменяете.—.будьте.готовы.к.сбоям.и.последующему.восстановлению.состояния .
Если.вы.будете.соблюдать.рекомендации,.изложенные.в.этой.главе,.у.разработчиков.
приложений.не.будет.особых.проблем.с.использованием.типов.вашей.библиотеки.
классов
Если.вы.—.разработчик.приложений,.определяйте.любую.политику,.какую.сочтете.
нужной .Придерживаясь.правил.разработки,.вы.сможете.быстрее.выявлять.и.ис-
правлять.ошибки.в.своем.коде,.что.повысит.устойчивость.ваших.приложений .Однако.
вы.вольны.отходить.от.этих.правил,.если.после.тщательного.обдумывания.сочтете.
это.необходимым .Политику.приложения.(например,.более.агрессивный.перехват.
исключений.кодом.приложения).определяете.именно.вы
активно используйте блоки finally
По-моему, блоки
finally
— прекрасное средство! Они позволяют определять код,
который будет гарантированно исполнен независимо от вида сгенерированного
потоком исключения. Блоки
finally
нужны, чтобы выполнить очистку после лю-
бой успешно начатой операции, прежде чем вернуть управление или продолжить
исполнение кода, расположенного после них. Блоки
finally
также часто исполь-
зуются для явного уничтожения любых объектов с целью предотвращения утечки
ресурсов. В следующем примере в этом блоке размещен весь код, выполняющий
очистку (закрывающий файл):
using System;
using System.IO;
public sealed class SomeType {
private void SomeMethod() {
// Открытие файла
FileStream fs = new FileStream(@"C:\Data.bin ", FileMode.Open);
try {
// Вывод частного от деления 100 на первый байт файла
Console.WriteLine(100 / fs.ReadByte());
}
finally {
// В блоке finally размещается код очистки, гарантирующий
// закрытие файла независимо от того, возникло исключение
// (например, если первый байт файла равен 0) или нет
fs.Close();
}
}
}
Гарантированное исполнение кода очистки при любых обстоятельствах настоль-
ко важно, что большинство языков поддерживает соответствующие программные
конструкции. Например, в C# при использовании инструкций
lock
,
using
и
foreach
526
Do'stlaringiz bilan baham: |