Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
// На этот раз генерировать исключение, если пользователь// превышает предел, указанный в MaxSpeed.public void Accelerate(int delta){ if (_carIsDead) { Console.WriteLine("{0} is out of order...", PetName); } else { CurrentSpeed += delta; if (CurrentSpeed >= MaxSpeed) { CurrentSpeed = 0; _carIsDead = true; // Использовать ключевое слово throw для генерации исключения. throw new Exception($"{PetName} has overheated!"); } Console.WriteLine("=> CurrentSpeed = {0}", CurrentSpeed); }}Прежде чем выяснять, каким образом вызывающий код будет перехватывать данное исключение, необходимо отметить несколько интересных моментов. Для начала, если вы генерируете исключение, то всегда самостоятельно решаете, как вводится в действие ошибка и когда должно генерироваться исключение. Здесь мы предполагаем, что при попытке увеличить скорость объекта
CarSystem.ExceptionAccelerate()В качестве альтернативы метод
Accelerate()Кроме того, обратите внимание, что из кода метода был удален финальный оператор
elsethrowcatchtryelseВ любом случае, если вы снова запустите приложение с показанной ранее логикой в операторах верхнего уровня, то исключение в итоге будет сгенерировано. В показанном далее выводе видно, что результат отсутствия обработки этой ошибки нельзя назвать идеальным, учитывая получение многословного сообщения об ошибке (с вашим путем к файлу и номерами строк) и последующее прекращение работы программы:
***** Simple Exception Example *****=> Creating a car and stepping on it!Jamming...=> CurrentSpeed = 30=> CurrentSpeed = 40=> CurrentSpeed = 50=> CurrentSpeed = 60=> CurrentSpeed = 70=> CurrentSpeed = 80=> CurrentSpeed = 90=> CurrentSpeed = 100Unhandled exception. System.Exception: Zippy has overheated! at SimpleException.Car.Accelerate(Int32 delta) in [путь к файлу]Car.cs:line 52 at SimpleException.Program.Main(String[] args) in [путь к файлу]Program.cs:line 16Перехват исключений
На заметку! Те, кто пришел в .NET 5 из мира Java, должны помнить о том, что члены типа не прототипируются набором исключений, которые они могут генерировать (другими словами, платформа .NET Core не поддерживает проверяемые исключения). Лучше это или хуже, но вы не обязаны обрабатывать каждое исключение, генерируемое отдельно взятым членом.
Поскольку метод
Accelerate()try/catchДальнейшие действия с такими данными в значительной степени зависят от вас. Вы можете зафиксировать их в файле отчета, записать в журнал событий, отправить по электронной почте системному администратору или отобразить конечному пользователю сообщение о проблеме. Здесь мы просто выводим детали исключения в окно консоли:
// Обработка сгенерированного исключения.Console.WriteLine("***** Simple Exception Example *****");Console.WriteLine("=> Creating a car and stepping on it!");Car myCar = new Car("Zippy", 20);myCar.CrankTunes(true);// Разогнаться до скорости, превышающей максимальный// предел автомобиля, с целью выдачи исключенияtry{ for(int i = 0; i < 10; i++) { myCar. Accelerate(10); }}catch(Exception e){Похожие книги на "Язык программирования C#9 и платформа .NET5", Троелсен Эндрю
Троелсен Эндрю читать все книги автора по порядку
Троелсен Эндрю - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки mir-knigi.info.