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ż
- Klasa i właściwości wyjątków
- Instrukcje: Używanie bloku try/catch do przechwytywania wyjątków
- Instrukcje: Używanie określonych wyjątków w bloku catch
- Instrukcje: Jawne zgłaszanie wyjątków
- Instrukcje: Tworzenie wyjątków zdefiniowanych przez użytkownika
- Używanie obsługi wyjątków filtrowanych przez użytkownika
- Instrukcje: Używanie bloków finally
- Obsługa wyjątków międzyoperacyjności COM
- Najlepsze rozwiązania dotyczące wyjątków
- Co każdy deweloper musi wiedzieć o wyjątkach w środowisku uruchomieniowym