En undtagelse er en fejl, der opstår ved runtime og afslutter den normale strøm af et program, hvis det ikke håndteres korrekt. Når der forekommer undtagelser, vil du muligvis ikke afsløre den aktuelle stakksporing eller undtagelsesmeddelelse til brugeren. Brugerdefinerede undtagelser kan bruges til at tilføje klare, meningsfulde og brugervenlige oplysninger til undtagelser, når der opstår fejl, mens dit program kører.
Baseklassen for alle undtagelser i .Net er Undtagelse
. Alle klasser i undtagelseshierarkiet stammer direkte eller indirekte fra denne klasse. Bemærk, at System.ApplicationException
og System.SystemException
klasser udvider System. Undtagelse
klasse, som igen er afledt af System. Objekt
klasse. Bemærk, at undtagelser er ligesom alle andre typer i .Net.
ApplicationException vs. System.Exception
For at oprette en brugerdefineret undtagelsesklasse skal du definere en type. Når du designer tilpassede undtagelsesklasser, skal du udlede din klasse fra System. Undtagelse
og ikke fra ApplicationException
. ApplicationException
var oprindeligt beregnet til at blive brugt til at oprette brugerdefinerede undtagelser, men det anbefales ikke længere at bruge det. Som Microsofts dokumentation siger:
Undtagelse
klasse snarere endApplicationException
klasse. Du skal ikke smide enApplicationException
undtagelse i din kode, og du skal ikke fange enApplicationException
undtagelse, medmindre du har til hensigt at genkaste den oprindelige undtagelse.Grunden ApplicationException
er forældet, er, at brug af det unødigt udvider undtagelseshierarkiet. Selvom ApplicationException
klasse udvider Undtagelse
klasse tilføjer den ikke ny funktionalitet. Dens eneste formål var at give en måde at skelne mellem undtagelser defineret af applikationer og undtagelser defineret af systemet.
Design af en brugerdefineret undtagelsesklasse
Lad os nu grave i noget kode. Følgende kodestykke viser, hvordan du kan komme i gang med at oprette en brugerdefineret undtagelsesklasse i C # ved at udlede System. Undtagelse
klasse. Bemærk, at du skal give et meningsfuldt navn til din brugerdefinerede undtagelsesklasse. I dette eksempel opretter vi en brugerdefineret undtagelsesklasse med navnet LoginUndtagelse,
som kan bruges til at fange fejl, der kan opstå, når en bruger logger på systemet, f.eks. hvis brugerlegitimationsoplysningerne er forkerte.
offentlig klasse LoginException: System.Exception{
//AT GØRE
}
Følgende kodeliste viser vores brugerdefinerede undtagelsesklasse med standard- og argumentkonstruktører implementeret.
offentlig klasse LoginException: System.Exception{
///
/// Standardkonstruktør
///
offentlig LoginException (): base ()
{
}
///
/// Argumentkonstruktør
///
/// Dette er beskrivelsen af undtagelsen
offentlig LoginUndtagelse (streng besked): base (besked)
{
}
///
/// Argumentkonstruktør med indre undtagelse
///
/// Dette er beskrivelsen af undtagelsen
/// Indre undtagelse
offentlig LoginException (streng besked, undtagelse innerException): base (besked, innerException)
{
}
///
/// Argumentkonstruktør med serialiseringsunderstøttelse
///
/// Forekomst af SerializationInfo
/// Forekomst af StreamingContext
beskyttet LoginException (SerializationInfo info, StreamingContext context): base (info, context)
{
}
}
Bemærk brugen af parametrene i konstruktøren af LoginUndtagelse
klasse og hvordan basisklassekonstruktører kaldes. Bemærk også, hvordan den sidste argumentkonstruktør bruges til at yde support til serialisering.
Brug af en brugerdefineret undtagelsesklasse
Følgende kodeliste viser, hvordan du kan bruge LoginUndtagelse
klasse vi lige har implementeret.
statisk ugyldigt Main (streng [] args){
prøve
{
// Skriv kode her for at logge ind på brugeren.
// Hvis de angivne legitimationsoplysninger er ugyldige
// et undtagelsesobjekt smides.
smid nyt LoginException (“Ugyldige legitimationsoplysninger leveres ...”);
}
fange (LoginException loginException)
{
// Skriv kode her for at håndtere undtagelsen
Console.WriteLine (loginException.Message);
}
Console.Read ();
}
Bemærk, at du kun skal implementere brugerdefinerede undtagelsesklasser, når du vil tilføje mere funktionalitet til undtagelseshåndteringen i dine applikationer, eller når det giver mening at give brugeren yderligere oplysninger. I de fleste tilfælde vil du gerne stole på standardundtagelserne. Net giver dig.