Gerarchia delle eccezioni
Esistono due tipi di eccezioni: le eccezioni generate nel programma in esecuzione e quelle generate in Common Language Runtime. Esiste inoltre una gerarchia di eccezioni generabili sia in un'applicazione che nel runtime.
Exception rappresenta la classe base delle eccezioni. Varie classi di eccezione ereditano direttamente da Exception, incluse ApplicationException e SystemException. Queste due classi costituiscono la base di quasi tutte le eccezioni del runtime.
La maggior parte delle eccezioni che derivano direttamente da Exception non aggiunge alcuna funzionalità alla classe Exception. La gerarchia della classe InvalidCastException, ad esempio, è la seguente:
Object Eccezione SystemException InvalidCastException
Quando si verifica un errore nel runtime viene generata la classe derivata appropriata di SystemException. Tali errori derivano da controlli che non hanno avuto esito positivo in fase di esecuzione, come un errore relativo ad un indice di matrice superiore alla dimensione con cui la matrice è stata definita, e possono verificarsi durante l'esecuzione di qualsiasi metodo. Se si progetta un'applicazione in cui vengono create nuove eccezioni, sarà opportuno derivare tali eccezioni dalla classe Exception. Non è consigliabile intercettare un'eccezione SystemException, né costituisce una buona pratica di programmazione generare un'eccezzione SystemException nell'applicazione.
Le eccezioni più gravi, ovvero quelle generate nel runtime o in condizioni in cui non è possibile il recupero, includono ExecutionEngineException, StackOverflowException e OutOfMemoryException.
Le eccezioni di interoperabilità derivano da SystemException e sono ulteriormente estese da ExternalException. COMException è, ad esempio, l'eccezione generata durante le operazioni di interoperabilità COM e deriva da ExternalException. Anche Win32Exception e SEHException derivano da ExternalException.
Gerarchia delle eccezioni del runtime
Nel runtime è disponibile un insieme di base di eccezioni derivate da SystemException che viene generato all'esecuzione di singole istruzioni. Nella tabella che segue sono riportate, in ordine gerarchico, le eccezioni standard fornite nel runtime e le condizioni in cui è opportuno creare una classe derivata.
Tipo di eccezione |
Tipo di base |
Descrizione |
Esempio |
---|---|---|---|
Object |
Classe base per tutte le eccezioni. |
Nessuno. Utilizzare una classe derivata di questa eccezione. |
|
Eccezione |
Classe base per tutti gli errori generati nel runtime. |
Nessuno. Utilizzare una classe derivata di questa eccezione. |
|
SystemException |
Generata nel runtime solo in caso di indicizzazione errata di una matrice. |
Indicizzazione di una matrice all'esterno dell'intervallo valido: arr[arr.Length+1] |
|
SystemException |
Generata nel runtime solo in caso di riferimento a un oggetto null. |
object o = null; o.ToString(); |
|
Generata dal runtime solo in caso di accesso a memoria non valida. |
Si verifica durante l'interazione con codice non gestito o codice gestito unsafe e quando viene utilizzato un puntatore non valido. |
||
SystemException |
Generata da metodi in caso di stato non valido. |
Chiamata a Enumerator.GetNext() dopo la rimozione di un Item dall'insieme sottostante. |
|
SystemException |
Classe base per tutte le eccezioni di argomento. |
Nessuno. Utilizzare una classe derivata di questa eccezione. |
|
ArgumentException |
Generata da metodi che non consentono la presenza di argomenti null. |
String s = null; "Calculate".IndexOf (s); |
|
ArgumentException |
Generata da metodi che verificano che gli argomenti siano compresi in un determinato intervallo. |
String s = "string"; s.Chars[9]; |
|
SystemException |
Classe base delle eccezioni che si verificano o sono destinate ad ambienti esterni al runtime. |
Nessuno. Utilizzare una classe derivata di questa eccezione. |
|
ExternalException |
Eccezione che include informazioni su HRESULT COM. |
Utilizzata nell'interoperabilità COM. |
|
ExternalException |
Eccezione che include informazioni sulla gestione delle eccezioni strutturata in Win32. |
Utilizzata nell'interoperabilità di codice non gestito. |
Vedere anche
Concetti
Classe e proprietà dell'eccezione
Suggerimenti per gestire le eccezioni
Gestione e generazione di eccezioni