Sdílet prostřednictvím


Zpracování a vyvolání výjimek v .NET

Aplikace musí být schopny zpracovávat chyby, ke kterým dochází během provádění konzistentně. .NET poskytuje model pro upozorňování aplikací na chyby jednotným způsobem: operace .NET indikují selhání vyvoláním výjimek.

Výjimky

Výjimkou je jakýkoli chybový stav nebo neočekávané chování, ke kterému dochází spuštěným programem. Výjimky můžou být vyvolány z důvodu chyby v kódu nebo v kódu, který voláte (například sdílenou knihovnu), nedostupných prostředků operačního systému, neočekávaných podmínek, se kterými modul runtime narazí (například kód, který nelze ověřit) atd. Vaše aplikace se může zotavit z některých z těchto podmínek, ale ne z jiných. I když se můžete zotavit z většiny výjimek aplikace, nemůžete provést obnovení z většiny výjimek modulu runtime.

V .NET je výjimka objekt, který dědí z System.Exception třídy. Vytvoří se výjimka v části kódu, kde došlo k problému. Výjimka se přenáší nahoru po zásobníku, dokud ji aplikace nezpracuje nebo program neukončí.

Výjimky vs. tradiční metody zpracování chyb

Model zpracování chyb jazyka tradičně závisel na jedinečném způsobu zjišťování chyb a lokalizaci obslužných rutin jazyka nebo na mechanismu zpracování chyb poskytovaných operačním systémem. Způsob, jakým .NET implementuje zpracování výjimek, poskytuje následující výhody:

  • Vyvolávání a zpracování výjimek je stejné ve všech programovacích jazycích .NET.

  • Nevyžaduje pro zpracování výjimek žádnou konkrétní syntaxi jazyka, ale umožňuje každému jazyku definovat vlastní syntaxi.

  • Výjimky můžou být vyvolány napříč procesem a dokonce i hranicemi počítačů.

  • Kód zpracování výjimek lze přidat do aplikace, aby se zvýšila spolehlivost programu.

Výjimky nabízejí výhody oproti jiným metodám oznámení o chybách, jako jsou návratové kódy. Selhání nezůstanou bez povšimnutí, protože pokud dojde k vyvolání výjimky a nezpracujete ji, prostředí runtime ukončí vaši aplikaci. Neplatné hodnoty se v systému dál nešířují v důsledku kódu, který nezkontroluje návratový kód selhání.

Běžné výjimky

V následující tabulce jsou uvedeny některé běžné výjimky s příklady toho, co je může způsobit.

Typ výjimky Popis Příklad
Exception Základní třída pro všechny výjimky. Žádná (použijte odvozenou třídu této výjimky).
IndexOutOfRangeException Vyvoláno modulem runtime pouze v případech, kdy je pole indexováno nesprávně. Indexování pole mimo platný rozsah:
arr[arr.Length+1]
NullReferenceException Vyvolá se modulem runtime pouze v případech, kdy je odkazován na objekt null. object o = null;
o.ToString();
InvalidOperationException Je vyhazován metodami ve neplatném stavu. Volání Enumerator.MoveNext() po odebrání položky z podkladové kolekce
ArgumentException Základní třída pro všechny výjimky argumentu Žádná (použijte odvozenou třídu této výjimky).
ArgumentNullException Vyvolán metodami, které neumožňují, aby argument byl null. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Vyvolán metodami, které ověřují, že argumenty jsou v dané oblasti. String s = "string";
s.Substring(s.Length+1);

Viz také