Теперь, имея функциональный класс Car
Accelerate просто отображает сообщение об ошибке, если вызывающий код пытается разогнать автомобиль до скорости, превышающей верхний предел.Чтобы модернизировать метод Accelerate
System.Exception, установив значение доступного только для чтения свойства Message через конструктор класса. Для отправки объекта ошибки обратно вызывающему коду применяется ключевое слово throw языка С#. Ниже приведен обновленный код метода Accelerate:// На этот раз генерировать исключение, если пользователь
// превышает предел, указанный в MaxSpeed.
public void Accelerate(int delta)
{
if (_carIsDead)
{
Console.WriteLine("{0} is out of order...", PetName);
}
else
{
CurrentSpeed += delta;
if (CurrentSpeed >= MaxSpeed)
{
CurrentSpeed = 0;
_carIsDead = true;
// Использовать ключевое слово throw для генерации исключения.
throw new Exception($"{PetName} has overheated!");
}
Console.WriteLine("=> CurrentSpeed = {0}", CurrentSpeed);
}
}
Прежде чем выяснять, каким образом вызывающий код будет перехватывать данное исключение, необходимо отметить несколько интересных моментов. Для начала, если вы генерируете исключение, то всегда самостоятельно решаете, как вводится в действие ошибка и когда должно генерироваться исключение. Здесь мы предполагаем, что при попытке увеличить скорость объекта Car
System.Exception для уведомления о невозможности продолжить выполнение метода Accelerate (в зависимости от создаваемого приложения такое предположение может быть как допустимым, так и нет).В качестве альтернативы метод Accelerate
Кроме того, обратите внимание, что из кода метода был удален финальный оператор else
throw), управление возвращается вызывающему методу (или блоку catch в операторе try). Это устраняет необходимость в финальном else. Оставите вы его ради лучшей читабельности или нет, зависит от ваших стандартов написания кода.В любом случае, если вы снова запустите приложение с показанной ранее логикой в операторах верхнего уровня, то исключение в итоге будет сгенерировано. В показанном далее выводе видно, что результат отсутствия обработки этой ошибки нельзя назвать идеальным, учитывая получение многословного сообщения об ошибке (с вашим путем к файлу и номерами строк) и последующее прекращение работы программы:
***** Simple Exception Example *****
=> Creating a car and stepping on it!
Jamming...
=> CurrentSpeed = 30
=> CurrentSpeed = 40
=> CurrentSpeed = 50
=> CurrentSpeed = 60
=> CurrentSpeed = 70
=> CurrentSpeed = 80
=> CurrentSpeed = 90
=> CurrentSpeed = 100
Unhandled exception. System.Exception: Zippy has overheated!
at SimpleException.Car.Accelerate(Int32 delta)
in [путь к файлу]\Car.cs:line 52
at SimpleException.Program.Main(String[] args)
in [путь к файлу]\Program.cs:line 16
Перехват исключений
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT