Tra le varie best practice di .NET, una che ho sentito
n-mila volte e ho metabolizzato senza (mea culpa) indagare ulteriormente è
quella di ereditare ogni custom exception dalla classe ApplicationException piuttosto che direttamente da System.Exception.
Ok, riconosco l'errore di essere stato poco curioso, ma
ieri sera, scoprendo qual è la vera realtà dei fatti, non ho potuto far a meno
di sorriderci un po' su! Parola di Jeffrey Richter, l'intenzione
originaria di Microsoft era tutt'altro che sbagliata: le eccezioni sollevate
dall'applicazione dovevano ereditare tutte da System.ApplicationException, mentre quelle sollevate dal
CLR in risposta ad errori di sistema dovevano appartenere alla gerarchia di
System.SystemException, in modo
da poterne distinguere "a monte" la natura.
La cosa bella è che, purtroppo, le classi stesse del
Framework non seguono questa guideline: se da un lato FormatException deriva da SystemException, dall'altro WaitHandleCannotBeOpenedException ha come base class ApplicationException, mentre IsolatedStorageException deriva direttamente da System.Exception.
Morale: SystemException e ApplicationException son lì solo per
retrocompatibilità, ma lo stesso buon Jeffrey consiglia di ereditare
direttamente da Exception e buona notte al secchio
powered by IMHO 1.3