Išimtis yra klaida, atsirandanti vykdymo metu ir nutraukianti įprastą programos vykdymo eigą, jei ji nėra tinkamai tvarkoma. Kai atsiranda išimčių, galite nenorėti atskleisti tikrojo kamino pėdsakų ar išimčių pranešimo vartotojui. Pasirinktines išimtis galima naudoti norint pridėti aiškią, prasmingą ir patogią informaciją prie išimčių, kai įvyksta klaidų, kai jūsų programa veikia.
Pagrindinė visų išimčių .Net klasė yra Išimtis
. Visos išimčių hierarchijos klasės tiesiogiai ar netiesiogiai kyla iš šios klasės. Atkreipkite dėmesį, kad System.ApplicationException
ir System.SystemException
klasės pratęsti Sistema. Išimtis
klasė, kuri savo ruožtu yra kilusi iš Sistema. Objektas
klasė. Atkreipkite dėmesį, kad išimtys yra panašios į bet kokias kitas .Net rūšis.
ApplicationException vs System.Exception
Norėdami sukurti pasirinktinę išimčių klasę, turėtumėte apibrėžti tipą. Kurdami pasirinktines išimčių klases, turėtumėte išvesti savo klasę Sistema. Išimtis
o ne iš ApplicationException
. ApplicationException
iš pradžių buvo numatyta naudoti kuriant vartotojo apibrėžtas išimtis, tačiau jų naudoti jau nerekomenduojama. Kaip teigiama „Microsoft“ dokumentuose:
Išimtis
klasė, o neApplicationException
klasė. Jūs neturėtumėte mestiApplicationException
išimtis jūsų kode ir neturėtumėte sugautiApplicationException
išimtis, nebent ketinate iš naujo išmesti pradinę išimtį.Priežastis ApplicationException
buvo nebenaudojama, kad be reikalo išplėsti išimčių hierarchiją. nors ApplicationException
klasė pratęsia Išimtis
klasės, tai neprideda naujų funkcionalumų. Vienintelis jo tikslas buvo suteikti būdą atskirti išimtis, kurias apibrėžia programos, ir išimtis, kurias apibrėžia sistema.
Suprojektuotos išimties klasės projektavimas
Dabar įsigilinkime į tam tikrą kodą. Šis kodo fragmentas parodo, kaip galite pradėti kurti tinkintą išimčių klasę C #, išvedę Sistema. Išimtis
klasė. Atminkite, kad savo išimčių klasei turėtumėte pateikti prasmingą pavadinimą. Šiame pavyzdyje sukursime pasirinktinę išimčių klasę, pavadintą LoginException,
kuri gali būti naudojama klaidoms, kurios gali atsirasti vartotojui prisijungus prie sistemos, sulaikyti, pvz., jei vartotojo kredencialai yra neteisingi.
viešosios klasės „LoginException“: „System.Exception“{
//DARYTI
}
Šiame kodų sąraše rodoma įprasta išimčių klasė su numatytaisiais ir argumentų konstruktoriais.
viešosios klasės „LoginException“: „System.Exception“{
///
/// Numatytasis konstruktorius
///
viešasis prisijungimasIšimtis (): bazė ()
{
}
///
/// Argumentų konstruktorius
///
/// Tai yra išimties aprašymas
public LoginException (eilutės pranešimas): bazė (žinutė)
{
}
///
/// Argumentų konstruktorius su vidine išimtimi
///
/// Tai yra išimties aprašymas
/// Vidinė išimtis
viešasis „LoginException“ (eilutės pranešimas, išimtis „internalException“): pagrindas (pranešimas, „internalException“)
{
}
///
/// Argumentų konstruktorius su serializavimo palaikymu
///
/// SerializationInfo egzempliorius
/// „StreamingContext“ egzempliorius
apsaugotas „LoginException“ („SerializationInfo“ informacija, „StreamingContext“ kontekstas): bazė (informacija, kontekstas)
{
}
}
Atkreipkite dėmesį į parametrų naudojimą „LoginException“
klasė ir kaip vadinami pagrindinės klasės konstruktoriai. Taip pat atkreipkite dėmesį į tai, kaip paskutinis argumentų konstruktorius naudojamas palaikant nuoseklumą.
Naudojant pasirinktinę išimčių klasę
Šis kodų sąrašas parodo, kaip galite naudoti „LoginException“
klasę, kurią ką tik įgyvendinome.
static void Main (string [] args){
bandyti
{
// Parašykite kodą čia, kad prisijungtumėte prie vartotojo.
// Jei pateikti kredencialai yra neteisingi
// išmetamas išimties objektas.
mesti naują „LoginException“ („Pateikti neteisingi prisijungimo duomenys ...“);
}
sugauti (LoginException loginException)
{
// Čia įrašykite kodą, kad galėtumėte tvarkyti išimtį
Console.WriteLine (loginException.Message);
}
Pultas.Skaitykite ();
}
Atminkite, kad tinkintas išimčių klases turėtumėte įdiegti tik tada, kai norite pridėti daugiau funkcijų prie išimčių tvarkymo savo programose arba kai yra prasminga suteikti vartotojui papildomos informacijos. Daugeliu atvejų norėsite pasikliauti standartinėmis išimtimis.