Programmering

Sådan implementeres en brugerdefineret undtagelsesklasse i C #

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:

Du bør udlede brugerdefinerede undtagelser fraUndtagelse 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.