Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcje obsługi wyjątków języka C# ułatwiają radzenie sobie z nieoczekiwanymi lub wyjątkowymi sytuacjami, które występują, gdy program jest uruchomiony. Obsługa wyjątków używa słów kluczowych try
, catch
i finally
do wykonywania działań, które mogą się nie powieść, do radzenia sobie z niepowodzeniami, gdy uznasz to za zasadne, oraz do oczyszczania zasobów później. Wyjątki mogą być generowane przez środowisko uruchomieniowe języka wspólnego (CLR), biblioteki platformy .NET lub innych firm lub kod aplikacji. Wyjątki są tworzone przy użyciu słowa kluczowego throw
.
W wielu przypadkach wyjątek może być zgłaszany nie przez metodę wywoływaną bezpośrednio przez kod, ale przez inną metodę dalej w stosie wywołań. Po wystąpieniu wyjątku clR rozwinie stos, wyszukuje metodę z blokiem catch
dla określonego typu wyjątku i wykona pierwszy taki catch
blok, który znajdzie. Jeśli nie znajdzie odpowiedniego catch
bloku w dowolnym miejscu w stosie wywołań, zakończy proces i wyświetli komunikat dla użytkownika.
W tym przykładzie metoda testuje dzielenie według zera i przechwytuje błąd. Bez obsługi wyjątków ten program zakończyłby się z błędem DivideByZeroException, który nie został obsłużony.
public class ExceptionTest
{
static double SafeDivision(double x, double y)
{
if (y == 0)
throw new DivideByZeroException();
return x / y;
}
public static void Main()
{
// Input for test purposes. Change the values to see
// exception handling behavior.
double a = 98, b = 0;
double result;
try
{
result = SafeDivision(a, b);
Console.WriteLine($"{a} divided by {b} = {result}");
}
catch (DivideByZeroException)
{
Console.WriteLine("Attempted divide by zero.");
}
}
}
Omówienie wyjątków
Wyjątki mają następujące właściwości:
- Wyjątki to typy, które ostatecznie pochodzą z klasy
System.Exception
. - Użyj bloku
try
wokół instrukcji, które mogą zgłaszać wyjątki. - Po wystąpieniu wyjątku w bloku
try
, przepływ kontroli przechodzi do pierwszego skojarzonego programu obsługi wyjątków, który znajduje się w dowolnym miejscu w stosie wywołań. W językucatch
C#słowo kluczowe jest używane do definiowania procedury obsługi wyjątków. - Jeśli nie ma programu obsługi wyjątków dla danego wyjątku, program zatrzymuje wykonywanie z komunikatem o błędzie.
- Nie przechwytuj wyjątku, chyba że możesz go obsłużyć i pozostawić aplikację w opisanym stanie. Jeśli przechwycisz
System.Exception
, rzuć go ponownie, używając słowa kluczowegothrow
na końcu blokucatch
. -
catch
Jeśli blok definiuje zmienną wyjątku, możesz jej użyć, aby uzyskać więcej informacji o typie wyjątku, który wystąpił. - Wyjątki mogą być jawnie generowane przez program przy użyciu słowa kluczowego
throw
. - Obiekty wyjątków zawierają szczegółowe informacje o błędzie, takie jak stan stosu wywołań i opis tekstu błędu.
- Kod w
finally
bloku jest wykonywany niezależnie od tego, czy jest zgłaszany wyjątek. Użyj blokufinally
, aby zwolnić zasoby, na przykład zamknąć wszystkie strumienie lub pliki, które zostały otwarte w blokutry
. - Wyjątki zarządzane na platformie .NET są implementowane na podstawie mechanizmu obsługi wyjątków strukturalnych Win32. Aby uzyskać więcej informacji, zobacz Obsługa wyjątków ustrukturyzowanych (C/C++) oraz Podstawy obsługi wyjątków ustrukturyzowanych w systemie Win32.
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Wyjątki w specyfikacji języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.