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é
- Třída a vlastnosti výjimky
- Postupy: Používání bloku Try/Catch k zachycování výjimek
- Postupy: Používání specifických výjimek v bloku Catch
- Postupy: Explicitní generování výjimek
- Postupy: Vytváření uživatelsky definovaných výjimek
- Používání obslužných rutin uživatelsky filtrovaných výjimek
- Postupy: Používání bloků Finally
- Zpracování výjimek vzájemné spolupráce COM
- Doporučené postupy pro výjimky
- Co každý vývoj potřebuje vědět o výjimkách v modulu runtime