Zpracování a vyvolání výjimek v rozhraní .NETHandling and throwing exceptions in .NET

Aplikace musí být schopné zpracovávat chyby, ke kterým dochází během provádění konzistentním způsobem.Applications must be able to handle errors that occur during execution in a consistent manner. .NET poskytuje model pro oznamování chyb aplikacím jednotným způsobem: operace .NET indikují selhání vyvoláním výjimek..NET provides a model for notifying applications of errors in a uniform way: .NET operations indicate failure by throwing exceptions.

VýjimkyExceptions

Výjimka je jakýkoli chybový stav nebo neočekávané chování, které se zjistilo spuštěným programem.An exception is any error condition or unexpected behavior that is encountered by an executing program. Výjimky mohou být vyvolány z důvodu chyby ve vašem kódu nebo v kódu, který zavoláte (například sdílená knihovna), nedostupných prostředků operačního systému, neočekávaných podmínek, které modul runtime narazí (například kódu, který nelze ověřit) a tak dále.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. Vaše aplikace se může zotavit z některých těchto podmínek, ale ne od ostatních.Your application can recover from some of these conditions, but not from others. I když můžete zotavit z většiny výjimek aplikace, nemůžete obnovit z většiny běhových výjimek.Although you can recover from most application exceptions, you can't recover from most runtime exceptions.

V rozhraní .NET je výjimka objektem, který dědí z třídy System.Exception.In .NET, an exception is an object that inherits from the System.Exception class. Výjimka je vyvolána z oblasti kódu, kde došlo k problému.An exception is thrown from an area of code where a problem has occurred. Výjimka předává zásobníku, dokud ji aplikace nezpracuje nebo ukončí program.The exception is passed up the stack until the application handles it or the program terminates.

Výjimky vs. tradiční metody zpracování chybExceptions vs. traditional error-handling methods

Tradičně se model zpracování chyb jazyka spoléhal buď na jedinečný způsob zjišťování chyb a hledání obslužných rutin pro tyto účely, nebo na mechanismu zpracování chyb poskytovaný operačním systémem.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. Způsob, jakým rozhraní .NET implementuje zpracování výjimek, poskytuje následující výhody:The way .NET implements exception handling provides the following advantages:

  • Vyvolání a zpracování výjimky funguje stejně pro programovací jazyky .NET.Exception throwing and handling works the same for .NET programming languages.

  • Nevyžaduje žádnou konkrétní jazykovou syntaxi pro zpracování výjimek, ale umožňuje každému jazyku definovat vlastní syntaxi.Doesn't require any particular language syntax for handling exceptions, but allows each language to define its own syntax.

  • Výjimky mohou být vyvolány napříč procesem a dokonce i na hranicích počítačů.Exceptions can be thrown across process and even machine boundaries.

  • Kód pro zpracování výjimek lze přidat do aplikace pro zvýšení spolehlivosti programu.Exception-handling code can be added to an application to increase program reliability.

Výjimky nabízí výhody proti jiným způsobům chybového oznámení, jako jsou například návratové kódy.Exceptions offer advantages over other methods of error notification, such as return codes. Selhání nejdou nepatrné, protože pokud je vyvolána výjimka a nezpracováváte ji, modul runtime ukončí vaši aplikaci.Failures don't go unnoticed because if an exception is thrown and you don't handle it, the runtime terminates your application. Neplatné hodnoty nejsou dále šířeny v systému jako výsledek kódu, který nedokáže vyhledat návratový kód chyby.Invalid values don't continue to propagate through the system as a result of code that fails to check for a failure return code.

Běžné výjimkyCommon exceptions

V následující tabulce jsou uvedeny některé běžné výjimky s příklady toho, co můžou způsobit.The following table lists some common exceptions with examples of what can cause them.

Typ výjimkyException type PopisDescription PříkladExample
Exception Základní třída pro všechny výjimky.Base class for all exceptions. Žádný (použijte odvozenou třídu této výjimky).None (use a derived class of this exception).
IndexOutOfRangeException Vyvolána modulem runtime pouze v případě, že je nesprávně indexováno poleThrown by the runtime only when an array is indexed improperly. Indexování pole mimo platný rozsah:Indexing an array outside its valid range:
arr[arr.Length+1]
NullReferenceException Vyvolána modulem runtime pouze v případě, že je odkazováno na objekt s hodnotou null.Thrown by the runtime only when a null object is referenced. object o = null;
o.ToString();
InvalidOperationException Vyvoláno metodami, pokud je v neplatném stavu.Thrown by methods when in an invalid state. Volání Enumerator.MoveNext() po odebrání položky z podkladové kolekce.Calling Enumerator.MoveNext() after removing an item from the underlying collection.
ArgumentException Základní třída pro všechny výjimky argumentůBase class for all argument exceptions. Žádný (použijte odvozenou třídu této výjimky).None (use a derived class of this exception).
ArgumentNullException Vyvoláno metodami, které neumožňují, aby argument byl null.Thrown by methods that do not allow an argument to be null. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Vyvoláno metodami, které ověřují, zda jsou argumenty v daném rozsahu.Thrown by methods that verify that arguments are in a given range. String s = "string";
s.Substring(s.Length+1);

Viz také:See also