Eccezioni
Un’applicazione può smettere di funzionare per diversi motivi come ad esempio un errore di sistema, un errore di programmazione o semplicemente una errore da parte dell’utente.
Il meccanismo delle eccezioni permette di separare la parte di codice che identifica gli errori da quella che li gestisce. Un’eccezione è un’sitanza di una classe derivata da System.Exceprion, viene creata quando si verifica una certa situazione eccezionale d’errore. Per eseguire queste attività vengono messe a disposizione parole chiave che consentono di catturare (ma anche generare) eccezioni.
- try – blocco di codice che può generare un’eccezione;
- catch – blocco di codice dedicato alla gestione delle eccezioni;
- finally – blocco di codice da eseguire a prescindere dal verificarsi o meno di un’eccezione;
- trow – genera una nuova eccezione;
try { // codice che può generare un'eccezione } catch(TipoEccezione[variabile]) { // codice da eseguire se si verifica un'eccezione }
All’interno del blocco try si possono verificare diversi errori, ognuno può essere gestito utilizzando più blocchi catch, è consigliabile mettere sempre un blocco catch generico per catturare eventuali errori non previsti.
Il blocco finally viene eseguito in qualsiasi caso, prima vengono gestiti eventuali blocchi catch. Lo scopo è quando una parte di codice deve essere eseguito in ogni caso, ad esempio per rilasciare risorse che consumano memoria o che necessitano una sorta di chiusura.
Se un’eccezione non viene gestita risale fino ad arrivare al metodo Main, la classe AppDomain fornisce l’evento UnhandledException per gestire tali eccezioni.
La classe madre di tutte le eccezioni è la classe System.Exception, le proprietà pubbliche sono:
- Message – messaggio di testo che descrive l’eccezione;
- StackTrace – rappresentazionein forma testuale dello stack delle chiamate;
- InnerException – eccezione interna che ha causato quella attuale;
- TargetSite – il metodo che ha causato l’eccezione;
- Source – ottiene o imposta il nome dell’oggetto o applicazione che ha causato l’eccezione;
- HelpLink – un collegamento al file guida;
- Data – dizionario chiave-valore;
- HResult – valore numerico codificato assegnato a ogni eccezione;
Un’eccezione può essere creata e lanciata da parte dello sviluppatore nel proprio codice, tramite throw generiamo l’eccezione indicandone anche l’istanza. Sfruttando l’eredità possiamo creare classi di eccezioni personalizzata.
class MiaException: Exception { ... } ... try { throw new MiaException(); ... } catch(MiaException) { ... }
Un uso eccessivo ed ingiustificato provocherebbe un impatto negativo sulle prestazioni, quindi vanno usati come eventi assolutamente eccezionali.