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:
Unntak
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.