Kako implementirati prilagođenu klasu iznimke u C #

Iznimka je pogreška koja se javlja tijekom izvođenja i prekida normalni tijek izvršavanja programa ako se njime ne rukuje pravilno. Kada se pojave iznimke, možda nećete željeti otkriti stvarni trag steka ili poruku o iznimci. Prilagođene iznimke mogu se koristiti za dodavanje jasnih, smislenih i korisničkih informacija iznimkama kada se pojave pogreške dok je vaš program pokrenut.

Osnovna klasa za sve iznimke u .Net-u je Exception. Sve klase u hijerarhiji iznimki izravno ili neizravno potječu iz ove klase. Imajte na umu da System.ApplicationExceptioni System.SystemExceptionnastava produžiti System.Exceptionklasu, koja je pak proizlazi iz System.Objectrazreda. Imajte na umu da su iznimke poput svih ostalih vrsta u .Netu.

ApplicationException nasuprot System.Exception

Da biste stvorili prilagođenu klasu iznimke, trebali biste definirati vrstu. Prilikom dizajniranja prilagođenih klasa iznimki, trebali biste izvesti svoju klasu iz, System.Exceptiona ne iz nje ApplicationException. ApplicationExceptionizvorno je namijenjen korištenju za stvaranje izuzetaka definiranih od korisnika, ali više se ne preporučuje njegovo korištenje. Kao što Microsoftova dokumentacija navodi: 

Trebali biste izvoditi prilagođene iznimke iz  Exception klase, a ne iz  ApplicationException klase. Ne biste trebali dodavati  ApplicationException iznimku u svoj kôd i ne biste trebali uhvatiti  ApplicationException iznimku osim ako ne namjeravate ponovno baciti izvornu iznimku.

Razlog ApplicationExceptionje zastario taj što se njegovim nepotrebnim proširivanjem hijerarhije izuzetaka. Iako ApplicationExceptionklasa proširuje Exceptionklasu, ona ne dodaje novu funkcionalnost. Njegova jedina svrha bila je pružiti način za razlikovanje iznimki definiranih aplikacijama i iznimki definiranih sustavom.  

Dizajniranje prilagođene klase iznimke

Krenimo sada u neki kod. Sljedeći isječak koda pokazuje kako možete izvesti klasu prilagođene iznimke u C # izvođenjem System.Exceptionklase. Imajte na umu da biste trebali navesti smisleno ime za svoju prilagođenu klasu iznimke. U ovom ćemo primjeru stvoriti prilagođenu klasu iznimke s imenom LoginException, koja se može koristiti za hvatanje pogrešaka koje bi se mogle dogoditi kada se korisnik prijavi u sustav, npr. Ako su vjerodajnice korisnika netočne.

javna klasa LoginException: System.Exception

    {

       //NAPRAVITI

    }

Sljedeći popis kodova prikazuje našu prilagođenu klasu iznimke s implementiranim zadanim i konstruktorima konstruktora.

javna klasa LoginException: System.Exception

    {

        ///

        /// Zadani konstruktor

        ///

        javni LoginException (): base ()

        {

        }

        ///

        /// Konstruktor argumenata

        ///

        /// Ovo je opis iznimke

        javni LoginException (niz poruka): baza (poruka)

        {

        }

        ///

        /// Konstruktor argumenata s unutarnjom iznimkom

        ///

        /// Ovo je opis iznimke

        /// Unutarnja iznimka

        javni LoginException (poruka niza, izuzetak innerException): baza (poruka, innerException)

        {

        }

        ///

        /// Konstruktor argumenata s podrškom za serializaciju

        ///

        /// Instance SerializationInfo

        /// Instanca StreamingContext

        zaštićeni LoginException (SerializationInfo info, StreamingContext context): baza (info, kontekst)

        {

        }

    }

Obratite pažnju na upotrebu parametara u konstruktoru LoginExceptionklase i kako se nazivaju konstruktori osnovne klase. Također imajte na umu kako se zadnji konstruktor argumenata koristi za pružanje podrške za serializaciju.

Korištenje prilagođene klase iznimke

Sljedeći popis koda pokazuje kako možete koristiti LoginExceptionklasu koju smo upravo implementirali.

statička praznina Main (string [] args)

        {

            probati

            {

                // Ovdje napišite kod za prijavu korisnika.

                // Ako su pružene vjerodajnice nevaljane

                // baca se objekt iznimke.

          baciti novi LoginException („Navedene su nevažeće vjerodajnice ...“);

            }

            ulov (LoginException loginException)

            {

                // Ovdje napišite kod za obradu iznimke

                Console.WriteLine (loginException.Message);

            }

            Console.Read ();

        }

Imajte na umu da biste trebali implementirati prilagođene klase iznimki samo kada želite dodati više funkcionalnosti rukovanju iznimkama u svojim aplikacijama ili kada ima smisla korisniku dati dodatne informacije. U većini slučajeva morat ćete se osloniti na standardne iznimke .Net vam daje.