Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 159
- Предыдущая
- 159/642
- Следующая
{
...
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();
Итак, теперь, когда вы понимаете базовый процесс построения специального исключения, пришло время опереться на эти знания.
Построение специальных исключений, способ второй
В текущем классе
CarIsDeadException
System.Exception.Message
Message
public class CarIsDeadException : ApplicationException
{
public DateTime ErrorTimeStamp { get; set; }
public string CauseOfError { get; set; }
public CarIsDeadException() { }
// Передача сообщения конструктору родительского класса.
public CarIsDeadException(string message, string cause, DateTime time)
:base(message)
{
CauseOfError = cause;
ErrorTimeStamp = time;
}
}
Обратите внимание, что на этот раз не объявляется строковая переменная для представления сообщения и не переопределяется свойство
Message
System.ApplicationException
Не удивляйтесь, если большинство специальных классов исключений (а то и все) будет соответствовать такому простому шаблону. Во многих случаях роль специального исключения не обязательно связана с предоставлением дополнительной функциональности помимо той, что унаследована от базовых классов. На самом деле цель в том, чтобы предложить строго именованный тип, который четко идентифицирует природу ошибки, благодаря чему клиент может реализовать отличающуюся логику обработки для разных типов исключений.
Построение специальных исключений, способ третий
Если вы хотите создать по-настоящему интересный специальный класс исключения, тогда необходимо обеспечить наличие у класса следующих характеристик:
• он является производным от класса
Exception/ApplicationException
• в нем определен стандартный конструктор;
• в нем определен конструктор, который устанавливает значение унаследованного свойства
Message
• в нем определен конструктор для обработки "внутренних исключений".
Чтобы завершить исследование специальных исключений, ниже приведена последняя версия класса
CarIsDeadException
public class CarIsDeadException : ApplicationException
{
private string _messageDetails = String.Empty;
public DateTime ErrorTimeStamp {get; set;}
public string CauseOfError {get; set;}
public CarIsDeadException(){}
public CarIsDeadException(string cause, DateTime time) :
this(cause,time,string.Empty)
{
}
public CarIsDeadException(string cause, DateTime time,
string message) :
this(cause,time,message, null)
{
}
public CarIsDeadException(string cause, DateTime time,
string message, System.Exception
inner) :
base(message, inner)
{
- Предыдущая
- 159/642
- Следующая