Как и в SystemException
ApplicationException не определено. С точки зрения функциональности единственная цель класса System.ApplicationException состоит в идентификации источника ошибки. При обработке исключения, производного от System.ApplicationException, можно предполагать, что исключение было сгенерировано кодовой базой выполняющегося приложения, а не библиотеками базовых классов .NET Core либо исполняющей средой .NET 5.Построение специальных исключений, способ первый
Наряду с тем, что для сигнализации об ошибке во время выполнения можно всегда генерировать экземпляры System.Exception
Например, предположим, что вы хотите построить специальное исключение (по имени CarIsDeadException
System.Exception/System.ApplicationException (по соглашению имена всех классов исключений заканчиваются суффиксом Exception).На заметку!
Согласно правилу все специальные классы исключений должны быть определены как открытые (вспомните, что стандартным модификатором доступа для невложенных типов являетсяinternal). Причина в том, что исключения часто передаются за границы сборок и потому должны быть доступны вызывающей кодовой базе.Создайте новый проект консольного приложения по имени 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)
{
...
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT