Programavimas

Geriausia praktika tvarkant išimtis C #

Išimčių tvarkymas yra vykdymo laiko klaidų jūsų programos kode technika. Iš esmės turite dvi išimčių kategorijas: išimtis, kurias sukuria programa, ir tas, kurias sukuria vykdymo laikas. Su išimtimis reikia elgtis atsargiai - turėtumėte gerai įsivaizduoti, kaip elgtis su išimtimis ir kada jas reikia tvarkyti savo kode. Šiame įraše pateiksiu kelis patarimus ir geriausią praktiką dirbant su išimtimis C #.

Pagrindinė visų išimčių .NET klasė yra Išimtis. Visos išimčių hierarchijos išimčių klasės tiesiogiai ar netiesiogiai gaunamos iš šios klasės. „ApplicationException“ ir „SystemException“ klasės yra kilusios iš klasės „Exception“. „Common Language Runtime“ (CLR) išmeta tipo egzempliorių, gautą iš „SystemException“, kai vykdymo metu įvyksta klaida. Atminkite, kad niekada neturėtumėte sugauti „SystemException“ ar mesti „SystemException“ egzemplioriaus į savo programos kodą.

Kurdami pasirinktines išimčių klases, visada gaukite išimties klasę, o ne iš „ApplicationException“ klasės. Viena iš to priežasčių yra ta, kad „ApplicationException“ egzempliorių meta programa, o ne vykdymo laikas. Įvedę „ApplicationException“ egzempliorių į savo kodą, jūs tiesiog padidintumėte skambučių kaminą, nepridėdami daug vertės.

Tai yra netinkamas metodas naudoti išimčių tvarkymą norint grąžinti informaciją iš metodo. Jei grąžinate išimties duomenis iš savo metodo, jūsų klasės dizainas yra neteisingas ir jį reikėtų peržiūrėti. Atminkite, kad metodo skambučių hierarchijoje išimtys suskaidytos į aukštesnį lygį ir nėra gera praktika išimtis tvarkyti visuose programos sluoksniuose. Išimtį turėtumėte tvarkyti kuo aukščiau skambučių hierarchijoje - galite naudoti išimtį pateikimo sluoksnyje ir rodyti vartotojui tinkamus pranešimus, kad praneštumėte apie tiksliai įvykusią klaidą.

Jei norite sugrąžinti duomenų bazės operaciją, reikia iš naujo pateikti išimtį. Gera praktika yra naudoti konkrečias išimtis, pvz., „FileNotFoundException“, „IOException“ ir kt., Kai rašote išimčių tvarkytuvus, o tada pabaigoje - „Exception“ klasėje - bendrą sugavimo bloką. Tai užtikrintų, kad jūs sužinosite tikslią klaidą arba konkrečią įvykusią klaidą. MSDN teigia: "„ ApplicationException “klasė neteikia informacijos apie išimčių priežastis. Daugeliu atvejų šios klasės egzempliorių nereikėtų mesti. Tais atvejais, kai ši klasė yra supaprastinta, turėtų būti pateiktas žmonėms suprantamas pranešimas, kuriame aprašoma klaida. perduota konstruktoriui “.

Turėtumėte naudoti „try-catch“ blokus, kad tvarkytumėte išimtis, ir naudokite paskutinį bloką, kad išvalytumėte programoje naudojamus išteklius. Bandymo bloke būtų kodas, dėl kurio gali kilti išimtis, fiksavimo blokas bus naudojamas bandymo bloke esančiai išimčiai tvarkyti, o galutinis blokas bus naudojamas paskirstyti visus programos naudojamus išteklius. Atkreipkite dėmesį, kad galutinis blokas garantuotai bus vykdomas, neatsižvelgiant į tai, ar įvyko išimtis, ar ne. Taigi pagaliau blokas yra geriausia vieta jūsų kode išvalyti jūsų panaudotus išteklius.

Žemiau pateiktas kodo fragmentas parodo, kaip sakinį „naudojant“ galima panaudoti šalinant išteklius. Atkreipkite dėmesį, kad sakinys "naudojant" yra bandymo pagaliau užblokuoti atitikmuo.

viešoji eilutė skaityti (eilutės failo pavadinimas)

{

bandyti

{

eilutės duomenys;

naudojant [StreamReader streamReader = new StreamReader (fileName)]

{

duomenys = streamReader.ReadToEnd ();

}

grąžinimo duomenys;

}

sugavimas (išimtis)

{

mesti;

}

}

Mesti išimtis yra brangu. Netinkama praktika peržvelgti išimtis - perrašant išimtis, jūs prarastumėte kamino pėdsakus.

bandyti

{

// Kodas, dėl kurio gali atsirasti išimtis

}

sugavimas (ex išimtis)

{

mesti ex;

}

Vietoj to, tiesiog naudokite teiginį „mesti“, jei nenorite tvarkyti išimties savo išimčių tvarkytuvėje, o skambučių hierarchijoje išimtis skleidžiama aukštyn.

bandyti

{

// Kodas, dėl kurio gali atsirasti išimtis

}

sugavimas (ex išimtis)

{

mesti;

}

Niekada nenurykite išimčių - niekada neturėtumėte slėpti įvykusios klaidos. Gera praktika registruoti išimtis savo programoje. Registruodami išimtis, visada turėtumėte registruoti išimties egzempliorių, kad būtų užregistruotas visas kamino pėdsakas, o ne tik išimties pranešimas. Čia yra tai iliustruojantis pavyzdys.

bandyti

{

// Kodas, dėl kurio gali atsirasti išimtis

}

sugavimas (ex išimtis)

{

„LogManager.Log“ (pvz., „ToString“);

}

Niekada neturėtumėte naudoti išimčių skleisti ar vykdyti verslo taisykles savo programoje. Naudodamiesi tinkama patvirtinimo logika, galite išvengti išimčių savo kode. Daugeliu atvejų reikėtų vengti išimčių - jas turėtumėte naudoti tik tada, kai to reikia.

Norėdami gauti daugiau informacijos, skaitykite šį MSDN straipsnį.

$config[zx-auto] not found$config[zx-overlay] not found