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

Aplikace musí být schopné zpracovávat chyby, ke kterým dochází během provádění konzistentním způsobem. .NET poskytuje model pro upozorňování aplikací na chyby jednotným způsobem: operace .NET označují 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 se můžou vyvolat kvůli chybě v kódu nebo v kódu, který voláte (například sdílenou knihovnu), nedostupným prostředkům operačního systému, neočekávaným podmínkám, ke kterým modul runtime dochází (například kód, který nejde 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 obnovit z většiny výjimek aplikace, nemůžete se obnovit z většiny výjimek modulu runtime.

V .NET je výjimka objekt, který dědí z System.Exception třídy. Výjimka je vyvoláná z oblasti kódu, kde došlo k problému. Výjimka se předá zásobníku, dokud ji aplikace nezpracuje nebo program ukončí.

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

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

  • Výjimky při vyvolání a zpracování fungují stejně pro programovací jazyky .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 se dají vyvolat napříč procesem a dokonce i hranicemi počítače.

  • Kód zpracování výjimek lze přidat do aplikace za účelem zvýšení spolehlivosti 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í se neoznačí, protože pokud dojde k vyvolání výjimky a nezpracujete ji, modul runtime aplikaci ukončí. Neplatné hodnoty se v systému dál nešířují v důsledku kódu, který nedokáže zkontrolovat návratový kód selhání.

Běžné výjimky

Následující tabulka uvádí 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. None (použijte odvozenou třídu této výjimky).
IndexOutOfRangeException Vyvoláno modulem runtime pouze v případě, že je pole indexováno nesprávně. Indexování pole mimo platný rozsah:
arr[arr.Length+1]
NullReferenceException Vyvolán modulem runtime pouze v případě, že je odkazován na objekt null. object o = null;
o.ToString();
InvalidOperationException Vyvolán metodami v 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 argumentů None (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é