Come implementare una classe di eccezione personalizzata in C #

Un'eccezione è un errore che si verifica in fase di esecuzione e termina il normale flusso di esecuzione di un programma se non gestito correttamente. Quando si verificano eccezioni, potresti non voler rivelare all'utente la traccia dello stack effettiva o il messaggio di eccezione. Le eccezioni personalizzate possono essere utilizzate per aggiungere informazioni chiare, significative e di facile utilizzo alle eccezioni quando si verificano errori durante l'esecuzione del programma.

La classe base per tutte le eccezioni in .Net è Exception. Tutte le classi nella gerarchia delle eccezioni derivano direttamente o indirettamente da questa classe. Notare che le classi System.ApplicationExceptione System.SystemExceptionestendono la System.Exceptionclasse, che a sua volta è derivata dalla System.Objectclasse. Nota che le eccezioni sono come qualsiasi altro tipo in .Net.

ApplicationException e System.Exception

Per creare una classe di eccezione personalizzata, è necessario definire un tipo. Quando si progettano classi di eccezioni personalizzate, è necessario derivare la propria classe da System.Exceptione non da ApplicationException. ApplicationExceptionoriginariamente doveva essere utilizzato per creare eccezioni definite dall'utente, ma non è più consigliato utilizzarlo. Come afferma la documentazione di Microsoft: 

È necessario derivare eccezioni personalizzate dalla  Exception classe anziché dalla  ApplicationException classe. Non dovresti lanciare  ApplicationException un'eccezione nel tuo codice e non dovresti catturare  ApplicationException un'eccezione a meno che tu non intenda rilanciare l'eccezione originale.

Il motivo ApplicationExceptionè stato deprecato è che il suo utilizzo estende inutilmente la gerarchia delle eccezioni. Sebbene la ApplicationExceptionclasse estenda la Exceptionclasse, non aggiunge nuove funzionalità. Il suo unico scopo era fornire un modo per distinguere tra le eccezioni definite dalle applicazioni e le eccezioni definite dal sistema.  

Progettazione di una classe di eccezione personalizzata

Analizziamo ora un codice. Il frammento di codice seguente mostra come iniziare a creare una classe di eccezione personalizzata in C # derivando la System.Exceptionclasse. Nota che dovresti fornire un nome significativo alla tua classe di eccezione personalizzata. In questo esempio, creeremo una classe di eccezione personalizzata denominata LoginException, che può essere utilizzata per intercettare gli errori che potrebbero verificarsi quando un utente accede al sistema, ad esempio, se le credenziali dell'utente non sono corrette.

classe pubblica LoginException: System.Exception

    {

       //FARE

    }

L'elenco di codice seguente mostra la nostra classe di eccezione personalizzata con i costruttori predefiniti e di argomenti implementati.

classe pubblica LoginException: System.Exception

    {

        ///

        /// Costruttore predefinito

        ///

        public LoginException (): base ()

        {

        }

        ///

        /// Costruttore di argomenti

        ///

        /// Questa è la descrizione dell'eccezione

        public LoginException (String message): base (message)

        {

        }

        ///

        /// Costruttore di argomenti con eccezione interna

        ///

        /// Questa è la descrizione dell'eccezione

        /// Eccezione interna

        public LoginException (messaggio String, eccezione innerException): base (message, innerException)

        {

        }

        ///

        /// Costruttore di argomenti con supporto per la serializzazione

        ///

        /// Istanza di SerializationInfo

        /// Istanza di StreamingContext

        LoginException protetto (informazioni SerializationInfo, contesto StreamingContext): base (informazioni, contesto)

        {

        }

    }

Notare l'utilizzo dei parametri nel costruttore della LoginExceptionclasse e come vengono chiamati i costruttori della classe base. Si noti inoltre come viene utilizzato l'ultimo costruttore di argomenti per fornire supporto per la serializzazione.

Utilizzo di una classe di eccezione personalizzata

Il seguente listato di codice mostra come usare la LoginExceptionclasse che abbiamo appena implementato.

static void Main (string [] args)

        {

            provare

            {

                // Scrivi qui il codice per accedere all'utente.

                // Se le credenziali fornite non sono valide

                // viene generato un oggetto eccezione.

          lancia una nuova LoginException ("Credenziali non valide fornite ...");

            }

            catch (LoginException loginException)

            {

                // Scrivi qui il codice per gestire l'eccezione

                Console.WriteLine (loginException.Message);

            }

            Console.Read ();

        }

Si noti che è necessario implementare classi di eccezione personalizzate solo quando si desidera aggiungere più funzionalità alla gestione delle eccezioni nelle applicazioni o quando ha senso fornire all'utente informazioni aggiuntive. Nella maggior parte dei casi, vorrai fare affidamento sulle eccezioni standard che .Net ti offre.