Izjema je napaka, ki se pojavi med izvajanjem in prekine običajni potek izvajanja programa, če ni pravilno obdelana. Ko pride do izjem, morda ne boste želeli uporabniku razkriti dejanske sledi skladbe ali sporočila o izjemi. Izjeme po meri lahko za izjeme dodate jasne, smiselne in uporabniku prijazne informacije, kadar pride do napak med izvajanjem programa.
Osnovni razred za vse izjeme v .Net je Izjema
. Vsi razredi v hierarhiji izjem izhajajo neposredno ali posredno iz tega razreda. Upoštevajte, da System.ApplicationException
in System.SystemException
razredi podaljšajo System.Exception
razred, ki pa izhaja iz System.Object
razred. Upoštevajte, da so izjeme tako kot vse druge vrste v .Net.
ApplicationException v primerjavi s System.Exception
Če želite ustvariti razred izjem po meri, morate definirati vrsto. Pri oblikovanju izjemnih razredov po meri bi morali izpeljati svoj razred System.Exception
in ne od ApplicationException
. ApplicationException
je bil prvotno namenjen ustvarjanju uporabniško določenih izjem, vendar uporaba tega ni več priporočljiva. Kot piše Microsoftova dokumentacija:
Izjema
razred, ne paApplicationException
razred. Ne smete metatiApplicationException
v svoji kodi in ne bi smeli ujetiApplicationException
izjema, razen če nameravate znova vrniti prvotno izjemo.Razlog ApplicationException
je zastarelo, da uporaba po nepotrebnem širi hierarhijo izjem. Čeprav je ApplicationException
razred podaljša Izjema
razreda, ne doda nove funkcionalnosti. Njen edini namen je bil zagotoviti način za razlikovanje med izjemami, ki jih določajo aplikacije, in izjemami, ki jih definira sistem.
Oblikovanje razreda izjem po meri
Poglejmo zdaj nekaj kode. Naslednji delček kode prikazuje, kako lahko začnete ustvarjati razred izjem po meri v C # z izpeljavo System.Exception
razred. Upoštevajte, da morate razredu izjem po meri navesti smiselno ime. V tem primeru bomo ustvarili razred izjem po meri z imenom LoginException,
ki se lahko uporablja za zajemanje napak, do katerih lahko pride, ko se uporabnik prijavi v sistem, npr.
javni razred LoginException: System.Exception{
//NAREDITI
}
Naslednji seznam kode prikazuje naš razred izjem po meri z implementiranimi privzetimi konstruktorji in konstruktorji argumentov.
javni razred LoginException: System.Exception{
///
/// Privzeti konstruktor
///
javni LoginException (): base ()
{
}
///
/// Argument constructor
///
/// To je opis izjeme
javni LoginException (niz sporočila): osnova (sporočilo)
{
}
///
/// Argument constructor z notranjo izjemo
///
/// To je opis izjeme
/// Notranja izjema
javni LoginException (sporočilo v nizu, izjema innerException): osnova (sporočilo, innerException)
{
}
///
/// Argument constructor s podporo za serializacijo
///
/// Primer SerializationInfo
/// Primer StreamingContext
zaščiten LoginException (SerializationInfo info, StreamingContext context): osnova (info, context)
{
}
}
Upoštevajte uporabo parametrov v konstruktorju LoginException
razreda in kako se imenujejo konstruktorji osnovnega razreda. Upoštevajte tudi, kako se zadnji konstruktor argumentov uporablja za podporo serializaciji.
Uporaba razreda izjem po meri
Naslednji seznam kod prikazuje, kako lahko uporabljate LoginException
razred, ki smo ga pravkar izvedli.
statična praznina Main (string [] args){
poskusite
{
// Tukaj napišite kodo za prijavo uporabnika.
// Če so navedene poverilnice neveljavne
// vrže se objekt izjeme.
vrzi novo LoginException (“Navedene so neveljavne poverilnice ...”);
}
catch (LoginException loginException)
{
// Tukaj napiši kodo za obravnavo izjeme
Console.WriteLine (loginException.Message);
}
Console.Read ();
}
Upoštevajte, da morate razrede izjem po meri izvajati le, če želite dodati več funkcij ravnanju z izjemami v svojih aplikacijah ali kadar je uporabniku smiselno dati dodatne informacije. V večini primerov se boste želeli zanesti na standardne izjeme, ki vam jih ponuja .Net.