Programmering

Hvordan implementere en tilpasset unntaksklasse i C #

Et unntak er en feil som oppstår ved kjøretid og avslutter normal gjennomføring av et program hvis det ikke håndteres riktig. Når unntak oppstår, vil du kanskje ikke avsløre den faktiske stabelsporingen eller unntaksmeldingen til brukeren. Egendefinerte unntak kan brukes til å legge til tydelig, meningsfull og brukervennlig informasjon til unntak når feil oppstår mens programmet kjører.

Baseklassen for alle unntak i .Net er Unntak. Alle klassene i unntakshierarkiet kommer direkte eller indirekte fra denne klassen. Merk at System.ApplicationException og System.SystemException klasser utvide System. Unntak klasse, som igjen er avledet fra System. Mål klasse. Merk at unntak er akkurat som alle andre typer i .Net.

ApplicationException vs. System.Exception

For å opprette en tilpasset unntaksklasse, bør du definere en type. Når du designer tilpassede unntaksklasser, bør du utlede klassen din fra System. Unntak og ikke fra ApplicationException. ApplicationException var opprinnelig ment å brukes til å lage brukerdefinerte unntak, men bruk av det anbefales ikke lenger. Som Microsofts dokumentasjon sier:

Du bør utlede tilpassede unntak fraUnntak klasse i stedet forApplicationException klasse. Du skal ikke kaste etApplicationException unntak i koden din, og du bør ikke fange etApplicationException unntak med mindre du har tenkt å kaste det opprinnelige unntaket på nytt.

Grunnen ApplicationException har blitt utfaset, er at bruk av det unødvendig utvider unntakshierarkiet. Selv om ApplicationException klasse utvider Unntak klasse, legger den ikke til ny funksjonalitet. Dens eneste formål var å gi en måte å skille mellom unntak definert av applikasjoner og unntak definert av systemet.

Designe en tilpasset unntaksklasse

La oss nå grave i litt kode. Følgende kodebit viser hvordan du kan komme i gang med å lage en tilpasset unntaksklasse i C # ved å utlede System. Unntak klasse. Merk at du bør gi et meningsfylt navn til din tilpassede unntaksklasse. I dette eksemplet vil vi opprette en tilpasset unntaksklasse som heter Innloggings unntak, som kan brukes til å fange opp feil som kan oppstå når en bruker logger på systemet, for eksempel hvis brukerlegitimasjonen er feil.

offentlig klasse LoginException: System.Exception

    {

//Å GJØRE

    }

Følgende kodeliste viser vår tilpassede unntaksklasse med standard- og argumentkonstruktører implementert.

offentlig klasse LoginException: System.Exception

    {

        ///

/// Standardkonstruktør

        ///

offentlig LoginException (): base ()

        {

        }

        ///

/// Argumentkonstruktør

        ///

/// Dette er beskrivelsen av unntaket

offentlig LoginException (strengmelding): base (melding)

        {

        }

        ///

/// Argumentkonstruktør med indre unntak

        ///

/// Dette er beskrivelsen av unntaket

/// Indre unntak

offentlig LoginException (streng melding, unntak innerException): base (melding, innerException)

        {

        }

        ///

/// Argumentkonstruktør med serialiseringsstøtte

        ///

/// Forekomst av SerializationInfo

/// Forekomst av StreamingContext

beskyttet LoginException (SerializationInfo info, StreamingContext context): base (info, context)

        {

        }

    }

Legg merke til bruken av parametrene i konstruktøren av Logg på unntak klasse og hvordan basisklassekonstruktører kalles. Legg også merke til hvordan den siste argumentkonstruktøren brukes til å gi støtte for serialisering.

Bruker en tilpasset unntaksklasse

Følgende kodeliste viser hvordan du kan bruke Logg på unntak klasse vi nettopp implementerte.

statisk tomrom Main (streng [] args)

        {

prøve

            {

// Skriv kode her for å logge inn brukeren.

// Hvis de oppgitte legitimasjonene er ugyldige

// et unntaksobjekt kastes.

kaste nytt LoginException ("Ugyldig legitimasjon gitt ...");

            }

fange (LoginException loginException)

            {

// Skriv kode her for å håndtere unntaket

Console.WriteLine (loginException.Message);

            }

Console.Read ();

        }

Vær oppmerksom på at du bare bør implementere tilpassede unntaksklasser når du vil legge til mer funksjonalitet i unntaksbehandling i applikasjonene dine, eller når det er fornuftig å gi brukeren tilleggsinformasjon. I de fleste tilfeller vil du stole på standard unntakene. Net gir deg.