Obsługa i zgłaszanie wyjątków na platformie .NETHandling and throwing exceptions in .NET

Aplikacje muszą mieć możliwość obsługi błędów występujących podczas wykonywania w spójny sposób.Applications must be able to handle errors that occur during execution in a consistent manner. .NET udostępnia model dotyczące powiadamiania aplikacji o błędach w jednolity sposób: operacje .NET wskazać błąd przez zgłaszanie wyjątków..NET provides a model for notifying applications of errors in a uniform way: .NET operations indicate failure by throwing exceptions.

WyjątkiExceptions

Wyjątek to każdy warunek błędu i nieoczekiwane zachowanie, które zostanie osiągnięty, wykonywania programu.An exception is any error condition or unexpected behavior that is encountered by an executing program. Wyjątki mogą zostać wygenerowane z powodu błędów w kodzie lub kod, który można wywoływać (np. biblioteki udostępnionej), zasobów niedostępny systemu operacyjnego, nieoczekiwane warunki, które środowisko uruchomieniowe napotka (na przykład kod, którego nie można zweryfikować) i tak dalej.Exceptions can be thrown because of a fault in your code or in code that you call (such as a shared library), unavailable operating system resources, unexpected conditions that the runtime encounters (such as code that can't be verified), and so on. Aplikację można odzyskać z niektórych z tych warunków, ale nie od innych użytkowników.Your application can recover from some of these conditions, but not from others. Mimo że można odzyskać z większości aplikacji wyjątki, nie można odzyskać z większości wyjątki środowiska uruchomieniowego.Although you can recover from most application exceptions, you can't recover from most runtime exceptions.

Na platformie .NET, wyjątek jest obiektem, który dziedziczy z System.Exception klasy.In .NET, an exception is an object that inherits from the System.Exception class. Wyjątek jest generowany przy użyciu obszaru kodu, w którym wystąpił problem.An exception is thrown from an area of code where a problem has occurred. Wyjątek jest przekazywany w górę stosu, dopóki aplikacja obsługuje ją lub program zakończy.The exception is passed up the stack until the application handles it or the program terminates.

Wyjątki a tradycyjnych metod obsługi błędówExceptions vs. traditional error-handling methods

Tradycyjnie modelu obsługi błędów języka skorzystała w unikatowy sposób wykrywania błędów i lokalizowania programy obsługi dla nich zarówno w języku lub na mechanizmu obsługi błędów, dostarczone przez system operacyjny.Traditionally, a language's error-handling model relied on either the language's unique way of detecting errors and locating handlers for them, or on the error-handling mechanism provided by the operating system. Sposób .NET implementuje obsługę wyjątków zapewnia następujące korzyści:The way .NET implements exception handling provides the following advantages:

  • Wyjątek zostanie zgłoszony i obsługa działa tak samo, dla języków programowania .NET.Exception throwing and handling works the same for .NET programming languages.

  • Nie wymaga żadnych składni konkretnego języka dla obsługi wyjątków, ale pozwala zdefiniować własną składnię dla każdego języka.Doesn't require any particular language syntax for handling exceptions, but allows each language to define its own syntax.

  • Wyjątki mogą zostać wygenerowane w procesie i nawet granic.Exceptions can be thrown across process and even machine boundaries.

  • Kod obsługi wyjątków, można dodać do aplikacji w celu zwiększenia niezawodności programu.Exception-handling code can be added to an application to increase program reliability.

Wyjątki oferują przewagę nad innymi metodami powiadomienia o błędzie, takich jak kody powrotne.Exceptions offer advantages over other methods of error notification, such as return codes. Błędy nie niezauważone, ponieważ jeśli wyjątek jest generowany i nie można go obsłużyć, środowisko uruchomieniowe kończy działanie aplikacji.Failures don't go unnoticed because if an exception is thrown and you don't handle it, the runtime terminates your application. Nieprawidłowe wartości nie w dalszym ciągu propagować przez system w wyniku kod, który zakończy się niepowodzeniem, aby sprawdzić, czy zwracany kod błędu.Invalid values don't continue to propagate through the system as a result of code that fails to check for a failure return code.

Typowe wyjątkiCommon exceptions

W poniższej tabeli wymieniono niektóre typowe wyjątki z przykładami co mogą być ich przyczyną.The following table lists some common exceptions with examples of what can cause them.

Typ wyjątkuException type OpisDescription PrzykładExample
Exception Klasa bazowa dla wszystkich wyjątków.Base class for all exceptions. Brak (Użyj klasy pochodnej tego wyjątku).None (use a derived class of this exception).
IndexOutOfRangeException Element zgłaszany przez środowisko uruchomieniowe, tylko wtedy, gdy tablica jest indeksowana nieprawidłowo.Thrown by the runtime only when an array is indexed improperly. Indeksowanie tablicy poza prawidłowym zakresem:Indexing an array outside its valid range:
arr[arr.Length+1]
NullReferenceException Element zgłaszany przez środowisko uruchomieniowe, tylko wtedy, gdy odwołuje się do obiektu o wartości null.Thrown by the runtime only when a null object is referenced. object o = null;
o.ToString();
InvalidOperationException Zgłoszony przez metody, gdy jest w nieprawidłowym stanie.Thrown by methods when in an invalid state. Wywoływanie Enumerator.MoveNext() po usunięciu elementu z kolekcji źródłowej.Calling Enumerator.MoveNext() after removing an item from the underlying collection.
ArgumentException Klasa bazowa dla wszystkich wyjątków argumentów.Base class for all argument exceptions. Brak (Użyj klasy pochodnej tego wyjątku).None (use a derived class of this exception).
ArgumentNullException Zgłoszony przez metody, które nie zezwalają na argument mieć wartości null.Thrown by methods that do not allow an argument to be null. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Zgłoszony przez metody, które Sprawdź, czy argumenty są w danym zakresie.Thrown by methods that verify that arguments are in a given range. String s = "string";
s.Substring(s.Length+1);

Zobacz takżeSee also