Кроме того, класс
Car
имеет несколько свойств для представления текущей скорости и указанного пользователем "дружественного названия" автомобиля, а также различные конструкторы для установки состояния нового объекта
Car
. Ниже приведено полное определение
Car
вместе с поясняющими комментариями.
using System;
namespace SimpleException
{
class Car
{
// Константа для представления максимальной скорости.
public const int MaxSpeed = 100;
// Свойства автомобиля.
public int CurrentSpeed {get; set;} = 0;
public string PetName {get; set;} = "";
// He вышел ли автомобиль из строя?
private bool _carIsDead;
// В автомобиле имеется радиоприемник.
private readonly Radio _theMusicBox = new Radio();
// Конструкторы.
public Car() {}
public Car(string name, int speed)
{
CurrentSpeed = speed;
PetName = name;
}
public void CrankTunes(bool state)
{
// Делегировать запрос внутреннему объекту.
_theMusicBox.TurnOn(state);
}
// Проверить, не перегрелся ли автомобиль.
public void Accelerate(int delta)
{
if (_carIsDead)
{
Console.WriteLine("{0} is out of order...", PetName);
}
else
{
CurrentSpeed += delta;
if (CurrentSpeed > MaxSpeed)
{
Console.WriteLine("{0} has overheated!", PetName);
CurrentSpeed = 0;
_carIsDead = true;
}
else
{
Console.WriteLine("=> CurrentSpeed = {0}",
CurrentSpeed);
}
}
}
}
}
Обновите код в файле
Program.cs
, чтобы заставить объект
Car
превышать заранее заданную максимальную скорость (установленную в
100
внутри класса
Car
):
using System;
using System.Collections;
using SimpleException;
Console.WriteLine("***** Simple Exception Example *****");
Console.WriteLine("=> Creating a car and stepping on it!");
Car myCar = new Car("Zippy", 20);
myCar.CrankTunes(true);
for (int i = 0; i < 10; i++)
{
myCar.Accelerate(10);
}
Console.ReadLine();
В результате запуска кода будет получен следующий вывод:
***** 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
Zippy has overheated!
Zippy is out of order...
Генерация общего исключения
Теперь, имея функциональный класс
Car
, давайте рассмотрим простейший способ генерации исключения. Текущая реализация метода
Accelerate()
просто отображает сообщение об ошибке, если вызывающий код пытается разогнать автомобиль до скорости, превышающей верхний предел.
Чтобы модернизировать метод
Accelerate()
для генерации исключения, когда пользователь пытается разогнать автомобиль до скорости, которая превышает установленный предел, потребуется создать и сконфигурировать новый экземпляр класса
System.Exception
, установив значение доступного только для чтения свойства
Message
через конструктор класса. Для отправки объекта ошибки обратно вызывающему коду применяется ключевое слово
throw
языка С#. Ниже приведен обновленный код метода
Accelerate()
: