=> CurrentSpeed = 70
=> CurrentSpeed = 80
=> CurrentSpeed = 90
*** Error! ***
Member name: Void Accelerate(Int32)
Class defining member: SimpleException.Car
Member type: Method
Message: Zippy has overheated!
Source: SimpleException
Stack: at SimpleException.Car.Accelerate(Int32 delta) ...
at SimpleException.Program.Main(String[] args) ...
Help Link: http://www.CarsRUs.com
-> Custom Data:
-> TimeStamp: The car exploded at 3/15/2020 16:22:59
-> Cause: You have a lead foot.
***** Out of exception logic *****
Свойство Data
Exception. Тем не менее, каким бы полезным ни было свойство Data, разработчики все равно обычно строят строго типизированные классы исключений, которые поддерживают специальные данные, применяя строго типизированные свойства.Такой подход позволяет вызывающему коду перехватывать конкретный тип, производный от Exception
Исключения уровня системы (System.SystemException)
В библиотеках базовых классов .NET 5 определено много классов, которые в конечном итоге являются производными от System.Exception
Например, в пространстве имен System
ArgumentOutOfRangeException, IndexOutOfRangeException, StackOverflowException и т.п. В других пространствах имен есть исключения, которые отражают поведение этих пространств имен. Например, в System.Drawing.Printing определены исключения, связанные с печатью, в System.IO — исключения, возникающие во время ввода-вывода, в System.Data — исключения, специфичные для баз данных, и т.д.Исключения, которые генерируются самой платформой .NET 5, называются
System.SystemException, который в свою очередь порожден от System.Exception (а тот — от класса System.Object):public class SystemException : Exception
{
// Various constructors.
}
Учитывая, что тип System.SystemException
System.SystemException, то есть возможность выяснить, что исключение сгенерировала исполняющая среда .NET 5, а не кодовая база выполняющегося приложения. Это довольно легко проверить, используя ключевое слово is:// Верно! NullReferenceException является SystemException.
NullReferenceException nullRefEx = new NullReferenceException;
Console.WriteLine(
"NullReferenceException is-a SystemException? : {0}",
nullRefEx is SystemException);
Исключения уровня приложения (Systern.ApplicationException)
Поскольку все исключения .NET 5 являются типами классов, вы можете создавать собственные исключения, специфичные для приложения. Однако из-за того, что базовый класс System.SystemException
System.Exception. Конечно, можно поступать и так, но взамен их лучше наследовать от класса System.ApplicationException:public class ApplicationException : Exception
{
// Разнообразные конструкторы.
}
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT