Hierarchie výjimek
Existují dva typy výjimek. Výjimky generované vykonávaným programem a výjimky generované modulem CLR (Common Language Runtime). Kromě toho je zde hierarchie výjimek, které mohou být vyvolány aplikací i modulem runtime.
Exception je základní třída pro výjimky. Několik tříd výjimek dědí přímo z Exception, včetně ApplicationException a SystemException. Tyto dvě třídy tvoří základ pro téměř všechny výjimky modulu runtime.
Většina výjimek, které jsou odvozeny přímo z Exception nepřidávají žádné funkce ke třídě Exception. Například heirarchie Třídy InvalidCastException je následující:
Object Výjimka SystemException InvalidCastException
Modul runtime vyvolá odpovídající odvozenou třídu z SystemException, pokud dojde k chybám. Tyto chyby vyplývají ze selhání kontrol modulu runtime (například chyby s vazbou mimo pole) a může k nim dojít při provádění jakýchkoli metod. Pokud navrhujete aplikace, které vytvoří nové výjimky, měli byste odvodit tyto výjimky ze třídy Exception. Není vhodné zachytit SystemException, ani není dobrou programátorskou praxí vyvolat ve vaší aplikaci SystemException.
Nejzávažnější výjimky – ty, co jsou vyvolány modulem runtime nebo v neobnovitelných podmínkách – zahrnují ExecutionEngineException, StackOverflowException, a OutOfMemoryException.
Výjimky Interoperation jsou odvozeny od SystemException a jsou dále rozšířeny ExternalException. Například COMException je výjimka, která je vyvolána během operací InterOp modelů COM a je odvozena z ExternalException. Win32Exception a SEHException jsou také odvozeny z ExternalException.
Hierarchie výjimek modulu runtime
Modul runtime obsahuje základní sadu výjimek odvozených z SystemException, která je vyvolává při provádění jednotlivých instrukcí. Následující tabulka obsahuje hierarchický seznam standardních výjimek poskytovaných modulem runtime a podmínky, za kterých byste měli vytvářet odvozené třídy.
Typ výjimky |
Základní typ |
Popis |
Příklad |
---|---|---|---|
Objekt |
Základní třída pro všechny výjimky. |
Žádné (použijte odvozenou třídu této výjimky). |
|
Výjimka |
Základní třída pro všechny chyby generované modulem runtime. |
Žádné (použijte odvozenou třídu této výjimky). |
|
SystemException |
Vyvolána modulem runtime pouze v případě, že je pole nesprávně indexováno. |
Indexování pole mimo platný rozsah: arr[arr.Length+1] |
|
SystemException |
Vyvolána modulem runtime pouze v případě, že je odkazováno na nulový objekt. |
object o = null; o.ToString(); |
|
Vyvolána modulem runtime pouze v případě, že je přistupováno k neplatné paměti. |
Vyvolá se v případě spolupráce s nespravovaným kódem nebo nebezpečným spravovaným kódem a když je použit neplatný ukazatel. |
||
SystemException |
Vyvolánána metodami v neplatném stavu. |
Volání Enumerator.GetNext() po odebrání Item ze zdrojové kolekce. |
|
SystemException |
Základní třída pro všechny výjimky argumentů. |
Žádné (použijte odvozenou třídu této výjimky). |
|
ArgumentException |
Vyvolána metodami, které neumožňují argumentu mít hodnotu null. |
String s = null; "Calculate".IndexOf (s); |
|
ArgumentException |
Vyvolána metodami, které ověřují, zda jsou argumenty v daném rozsahu. |
String s = "string"; s.Chars[9]; |
|
SystemException |
Základní třída pro výjimky, které se vyskytují nebo jsou zaměřeny na prostředí mimo modul runtime. |
Žádné (použijte odvozenou třídu této výjimky). |
|
ExternalException |
Výjimka obsahující informace modelu COM HRESULT. |
Použito v modelu zprostředkovatele komunikace s objekty COM. |
|
ExternalException |
Výjimka zapouzdřující strukturované informace zpracování výjimek typu Win32. |
Používána v operacích nespravovaného kódu. |
Viz také
Koncepty
Doporučené postupy pro zpracování výjimek