Язык программирования C#9 и платформа .NET5. Страница 158
NullReferenceException nullRefEx = new NullReferenceException();Console.WriteLine( "NullReferenceException is-a SystemException? : {0}", nullRefEx is SystemException);Исключения уровня приложения (Systern.ApplicationException)
Поскольку все исключения .NET 5 являются типами классов, вы можете создавать собственные исключения, специфичные для приложения. Однако из-за того, что базовый класс
System.SystemExceptionSystem.ExceptionSystem.ApplicationExceptionpublic class ApplicationException : Exception{ // Разнообразные конструкторы.}Как и в
SystemExceptionApplicationExceptionSystem.ApplicationExceptionSystem.ApplicationExceptionПостроение специальных исключений, способ первый
Наряду с тем, что для сигнализации об ошибке во время выполнения можно всегда генерировать экземпляры
System.ExceptionНапример, предположим, что вы хотите построить специальное исключение (по имени
CarIsDeadExceptionSystem.Exception/System.ApplicationExceptionExceptionНа заметку! Согласно правилу все специальные классы исключений должны быть определены как открытые (вспомните, что стандартным модификатором доступа для невложенных типов является
internalСоздайте новый проект консольного приложения по имени
CustomExceptionCar.csRadio.csCarRadioSimpleExceptionCustomExceptionЗатем добавьте в проект новый файл по имени
CarIsDeadException.csusing System;namespace CustomException{ // Это специальное исключение описывает детали условия // выхода автомобиля из строя . // (Не забывайте, что можно также просто расширить класс Exception.) public class CarIsDeadException : ApplicationException { }}Как и с любым классом, вы можете создавать произвольное количество специальных членов, к которым можно обращаться внутри блока
catchCarIsDeadExceptionMessageВместо заполнения словаря данных (через свойство
Datapublic 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_messageDetailsAccelerate()CarIsDeadExceptionSystem.Exception// Сгенерировать специальное исключение CarIsDeadException.public void Accelerate(int delta)