Создайте новый проект консольного приложения по имени CustomException
Car.cs и Radio.cs и измените название пространства имен, в котором определены типы Car и Radio, с SimpleException на CustomException.Затем добавьте в проект новый файл по имени CarIsDeadException.cs
using System;
namespace CustomException
{
// Это специальное исключение описывает детали условия
// выхода автомобиля из строя .
// (Не забывайте, что можно также просто расширить класс Exception.)
public class CarIsDeadException : ApplicationException
{
}
}
Как и с любым классом, вы можете создавать произвольное количество специальных членов, к которым можно обращаться внутри блока catch
CarIsDeadException, переопределив виртуальное свойство Message.Вместо заполнения словаря данных (через свойство Data
public class CarIsDeadException : ApplicationException
{
private string _messageDetails = String.Empty;
public DateTime ErrorTimeStamp {get; set;}
public string CauseOfError {get; set;}
public CarIsDeadException(){}
public CarIsDeadException(string message,
string cause, DateTime time)
{
_messageDetails = message;
CauseOfError = cause;
ErrorTimeStamp = time;
}
// Переопределить свойство Exception.Message.
public override string Message
=> $"Car Error Message: {_messageDetails}";
}
Здесь класс CarIsDeadException
_messageDetails), которое представляет данные, касающиеся текущего исключения; его можно устанавливать с использованием специального конструктора. Сгенерировать такое исключение в методе Accelerate() несложно. Понадобится просто создать, сконфигурировать и сгенерировать объект CarIsDeadException, а не System.Exception:// Сгенерировать специальное исключение CarIsDeadException.
public void Accelerate(int delta)
{
...
throw new CarIsDeadException(
$"{PetName} has overheated!",
"You have a lead foot", DateTime.Now)
{
HelpLink = "http://www.CarsRUs.com",
};
...
}
Для перехвата такого входного исключения блок catch
CarIsDeadException (тем не менее, с учетом того, что System.CarIsDeadException "является" System.Exception, по-прежнему допустимо перехватывать System.Exception):using System;
using CustomException;
Console.WriteLine("***** Fun with Custom Exceptions *****\n");
Car myCar = new Car("Rusty", 90);
try
{
// Отслеживать исключение.
myCar.Accelerate(50);
}
catch (CarIsDeadException e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.ErrorTimeStamp);
Console.WriteLine(e.CauseOfError);
}
Console.ReadLine();
Итак, теперь, когда вы понимаете базовый процесс построения специального исключения, пришло время опереться на эти знания.
Построение специальных исключений, способ второй