Własne wyjątki
Część sekcji Logika i sterowanie przepływem ścieżki C# w Coddy. Lekcja 29 z 66.
Niestandardowe wyjątki pozwalają tworzyć konkretne typy wyjątków dla unikalnych scenariuszy błędów w aplikacji.
Aby utworzyć własny wyjątek, zdefiniuj klasę, która dziedziczy po Exception. Dziedziczenie oznacza, że nowa klasa automatycznie zyskuje wszystkie zachowania klasy nadrzędnej, w tym przypadku Exception, a jednocześnie pozwala dodawać funkcjonalności lub je dostosowywać. Składnia class MyException : Exception oznacza, że MyException rozszerza Exception.
public class InvalidAgeException : Exception
{
public InvalidAgeException() : base("Age is not valid.")
{
}
public InvalidAgeException(string message) : base(message)
{
}
}: Exception: dziedziczy po wbudowanej klasie Exception.: base(...): wywołuje konstruktor nadrzędnej klasy Exception, aby ustawić komunikat o błędzie.
Pierwszy konstruktor udostępnia domyślny komunikat, gdy żaden nie został podany.
Drugi konstruktor przyjmuje własny komunikat, aby wywołujący mogli szczegółowo opisać błąd.
Teraz możesz zgłosić własny wyjątek, gdy zajdzie taka potrzeba:
int age = -5;
if (age < 0)
{
throw new InvalidAgeException("Age cannot be negative.");
}Gdy ten kod zostanie wykonany dla ujemnego wieku, zostanie zgłoszony wyjątek niestandardowy z komunikatem "Age cannot be negative."
Uwaga: W ćwiczeniach do tej lekcji funkcje walidujące zwracają true, gdy dane wejściowe są prawidłowe, a w przeciwnym razie zgłaszają wyjątek niestandardowy. Ponieważ nieobsłużony wyjątek natychmiast zatrzymuje wykonanie, przypadki testowe muszą jedynie sprawdzać ścieżkę zwracającą true: wyjątek sam w sobie jest obserwowalnym wynikiem dla nieprawidłowych danych wejściowych.
Wyzwanie
ŚredniUtwórz własną klasę wyjątku o nazwie InvalidTemperatureException, która dziedziczy po Exception. Powinna mieć:
- Konstruktor domyślny, który ustawia komunikat "Temperature is not valid."
- Konstruktor, który przyjmuje własny komunikat.
Następnie zaimplementuj metodę o nazwie checkTemperature, która:
- Przyjmuje parametr typu integer reprezentujący temperaturę w stopniach Celsjusza
- Rzuca wyjątek
InvalidTemperatureExceptionz komunikatem "Temperature below absolute zero!", jeśli temperatura jest niższa niż -273 - Zwraca true, jeśli temperatura jest prawidłowa
Spróbuj swoich sił
using System;
class CheckTemperature
{
// Utwórz tutaj własną klasę wyjątku
public static bool checkTemperature(int celsius)
{
// Napisz tutaj swój kod
}
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i sterowanie przepływem
1Tablice wielowymiarowe
Podstawy tablic 2DDeklarowanie i inicjalizacja tablic 2DDostęp do elementów tablic 2DZagnieżdżone pętle z tablicami 2DTablice postrzępionePodstawowe operacje na macierzachPodsumowanie — tablice wielowymiarowe4Techniki sterowania przepływem
Wczesne zwrotyKlauzule ochronneInstrukcje skoku (goto)Break i continueSpłaszczanie zagnieżdżonych warunków7Zaawansowane operatory logiczne
Ewaluacja z krótkim spięciemWarunkowe operatory logicznePriorytet operatorówPowtórzenie — zaawansowane operatory2Zaawansowane podejmowanie decyzji
Wiele warunkówZłożona logika Boole’aPorównanie if i switchZagnieżdżone instrukcje switchPodsumowanie — zaawansowane decyzje5Obsługa wyjątków
Podstawy try-catchTypy wyjątkówWiele bloków catchPraca z plikamiBlok finallyusing a try-finallyWłasne wyjątkiPowtórzenie — obsługa błędów3Udoskonalenia pętli
Wydajność pętliIterowanie po złożonych strukturachKażdy typ pętliRefaktoryzacja pętliPodsumowanie — zoptymalizowane pętle6Obsługa wartości null
Podstawy referencji nullTypy wartości dopuszczające nullWzorce sprawdzania nullProgramowanie defensywnePodsumowanie — bezpieczeństwo nullPoćwicz samodzielnie: Kompilator C# online