Obsługa i zgłaszanie wyjątków na platformie .NET

Aplikacje muszą mieć możliwość obsługi błędów występujących podczas wykonywania w spójny sposób. Platforma .NET udostępnia model do powiadamiania aplikacji o błędach w jednolity sposób: operacje platformy .NET wskazują na niepowodzenie przez zgłaszanie wyjątków.

Wyjątki

Wyjątek to dowolny warunek błędu lub nieoczekiwane zachowanie, które występuje przez program wykonujący. Wyjątki mogą być zgłaszane z powodu błędu w kodzie lub w kodzie wywoływanym (takim jak biblioteka udostępniona), niedostępnych zasobów systemu operacyjnego, nieoczekiwanych warunkach napotkanych przez środowisko uruchomieniowe (takich jak kod, którego nie można zweryfikować) itd. Aplikacja może odzyskać dane po niektórych z tych warunków, ale nie z innych. Chociaż można odzyskać dane po większości wyjątków aplikacji, nie można odzyskać sprawności po większości wyjątków środowiska uruchomieniowego.

Na platformie .NET wyjątkiem jest obiekt dziedziczony po System.Exception klasie. Wyjątek jest zgłaszany z obszaru kodu, w którym wystąpił problem. Wyjątek jest przekazywany w górę stosu, dopóki aplikacja nie obsłuży go lub program zakończy działanie.

Wyjątki a tradycyjne metody obsługi błędów

Tradycyjnie model obsługi błędów w języku polegał na unikatowym sposobie wykrywania błędów i lokalizowania dla nich programów obsługi lub na mechanizmie obsługi błędów dostarczonym przez system operacyjny. Sposób, w jaki platforma .NET implementuje obsługę wyjątków, zapewnia następujące korzyści:

  • Zgłaszanie wyjątków i obsługa działa tak samo w przypadku języków programowania .NET.

  • Nie wymaga żadnej konkretnej składni języka do obsługi wyjątków, ale umożliwia każdemu językowi zdefiniowanie własnej składni.

  • Wyjątki mogą być zgłaszane przez proces, a nawet granice maszyny.

  • Kod obsługi wyjątków można dodać do aplikacji w celu zwiększenia niezawodności programu.

Wyjątki oferują zalety innych metod powiadamiania o błędach, takich jak kody powrotne. Błędy nie są niezauważone, ponieważ jeśli zostanie zgłoszony wyjątek i nie obsłużysz go, środowisko uruchomieniowe zakończy działanie aplikacji. Nieprawidłowe wartości nie są nadal propagowane przez system w wyniku kodu, który nie może sprawdzić kodu powrotnego błędu.

Typowe wyjątki

W poniższej tabeli wymieniono niektóre typowe wyjątki z przykładami przyczyn.

Typ wyjątku Opis Przykład
Exception Klasa bazowa dla wszystkich wyjątków. Brak (użyj klasy pochodnej tego wyjątku).
IndexOutOfRangeException Zgłaszany przez środowisko uruchomieniowe tylko wtedy, gdy tablica jest indeksowana nieprawidłowo. Indeksowanie tablicy poza prawidłowym zakresem:
arr[arr.Length+1]
NullReferenceException Zgłaszany przez środowisko uruchomieniowe tylko wtedy, gdy obiekt o wartości null jest przywoływalny. object o = null;
o.ToString();
InvalidOperationException Zgłaszane przez metody w nieprawidłowym stanie. Wywoływanie Enumerator.MoveNext() po usunięciu elementu z bazowej kolekcji.
ArgumentException Klasa bazowa dla wszystkich wyjątków argumentów. Brak (użyj klasy pochodnej tego wyjątku).
ArgumentNullException Wyrzucony przez metody, które nie zezwalają na argument ma wartość null. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Wyrzucony przez metody, które sprawdzają, czy argumenty znajdują się w danym zakresie. String s = "string";
s.Substring(s.Length+1);

Zobacz też