Custom Exceptions
Часть раздела Логика и управление потоком путешествия по C# на Coddy — урок 29 из 66.
Пользовательские исключения позволяют вам создавать специфические типы исключений для уникальных сценариев ошибок вашего приложения.
Чтобы создать пользовательское исключение, определите класс, который наследует от Exception. Наследование означает, что ваш новый класс автоматически получает все поведение родительского класса — в этом случае Exception — при этом позволяя вам добавлять или настраивать функциональность. Синтаксис class MyException : Exception означает MyException расширяет Exception.
public class InvalidAgeException : Exception
{
public InvalidAgeException() : base("Age is not valid.")
{
}
public InvalidAgeException(string message) : base(message)
{
}
}: Exception — наследуется от встроенного класса Exception.: base(...) — вызывает конструктор родительского класса Exception для установки сообщения об ошибке.
Первый конструктор предоставляет сообщение по умолчанию, если ни одно не передано.
Второй конструктор принимает пользовательское сообщение, чтобы вызывающий код мог подробно описать ошибку.
Теперь вы можете выбросить ваше собственное исключение при необходимости:
int age = -5;
if (age < 0)
{
throw new InvalidAgeException("Age cannot be negative.");
}Когда этот код выполняется с отрицательным возрастом, он выбросит ваше пользовательское исключение с сообщением "Age cannot be negative."
Примечание: В упражнениях для этого урока функции валидации возвращают true, когда ввод действителен, и выбрасывают пользовательское исключение, когда это не так. Поскольку необработанное исключение немедленно останавливает выполнение, тест-кейсы должны только проверять путь возврата true — само исключение является наблюдаемым результатом для недействительных вводов.
Задание
СреднеСоздайте пользовательский класс исключения с именем InvalidTemperatureException, который наследуется от Exception. Он должен иметь:
- Конструктор по умолчанию, который устанавливает сообщение "Temperature is not valid."
- Конструктор, который принимает пользовательское сообщение.
Затем реализуйте метод с именем checkTemperature, который:
- Принимает целочисленный параметр, представляющий температуру в Цельсиях
- Выбрасывает
InvalidTemperatureExceptionс сообщением "Temperature below absolute zero!" если температура меньше -273 - Возвращает true, если температура действительна
Шпаргалка
Чтобы создать пользовательское исключение, определите класс, который наследуется от Exception:
public class InvalidAgeException : Exception
{
public InvalidAgeException() : base("Age is not valid.")
{
}
public InvalidAgeException(string message) : base(message)
{
}
}Выбрасывайте ваше пользовательское исключение при необходимости:
int age = -5;
if (age < 0)
{
throw new InvalidAgeException("Age cannot be negative.");
}Попробуйте сами
using System;
class CheckTemperature
{
// Создайте здесь свой пользовательский класс исключения
public static bool checkTemperature(int celsius)
{
// Напишите свой код здесь
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety