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

Eccezione

Object

Classe base per tutte le eccezioni.

Nessuno. Utilizzare una classe derivata di questa eccezione.

SystemException

Eccezione

Classe base per tutti gli errori generati nel runtime.

Nessuno. Utilizzare una classe derivata di questa eccezione.

IndexOutOfRangeException

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]

NullReferenceException

SystemException

Generata nel runtime solo in caso di riferimento a un oggetto null.

object o = null;

o.ToString();

AccessViolationException

SystemException

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.

InvalidOperationException

SystemException

Generata da metodi in caso di stato non valido.

Chiamata a Enumerator.GetNext() dopo la rimozione di un Item dall'insieme sottostante.

ArgumentException

SystemException

Classe base per tutte le eccezioni di argomento.

Nessuno. Utilizzare una classe derivata di questa eccezione.

ArgumentNullException

ArgumentException

Generata da metodi che non consentono la presenza di argomenti null.

String s = null;

"Calculate".IndexOf (s);

ArgumentOutOfRangeException

ArgumentException

Generata da metodi che verificano che gli argomenti siano compresi in un determinato intervallo.

String s = "string";

s.Chars[9];

ExternalException

SystemException

Classe base delle eccezioni che si verificano o sono destinate ad ambienti esterni al runtime.

Nessuno. Utilizzare una classe derivata di questa eccezione.

ComException

ExternalException

Eccezione che include informazioni su HRESULT COM.

Utilizzata nell'interoperabilità COM.

SEHException

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

Altre risorse

Nozioni fondamentali sulla gestione delle eccezioni