25.07.2017 Views

Intro-CSharp-Book-v2015

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Глава 12. Обработка на изключения 447<br />

}<br />

DoSomething();<br />

}<br />

catch (IOException)<br />

{<br />

DoSomethingElse();<br />

}<br />

finally<br />

{<br />

CloseTheFile();<br />

}<br />

Всъщност изключенията не ни спестяват усилията при намиране и<br />

обработка на грешките, но ни позволяват да правим това по далеч поелегантен,<br />

кратък, ясен и ефективен начин.<br />

Групиране на различните видове грешки<br />

Йерархичната същност на изключенията позволява наведнъж да се прихващат<br />

и обработват цели групи изключения. Когато използваме catch, ние<br />

не прихващаме само дадения тип изключение, а цялата йерархия на типовете<br />

изключения, наследници на декларирания от нас тип.<br />

catch (IOException e)<br />

{<br />

// Handle IOException and all its descendants<br />

}<br />

Горният пример ще прихване не само IOException, но и всички негови<br />

наследници в това число FileNotFoundException, EndOfStreamException,<br />

PathTooLongException и много други. Няма да бъдат прихванати изключения<br />

като UnauthorizedAccessException (липса на права за извършване на дадена<br />

операция) OutOfMemoryException (препълване на паметта), тъй като те не са<br />

наследници на IOException. Ако се съмнявате кои изключения да<br />

прихванете, разгледайте йерархията на изключенията в MSDN.<br />

Въпреки че не е добра практика, е възможно да направим прихващане на<br />

абсолютно всички изключения:<br />

catch (Exception e)<br />

{<br />

// A (too) general exception handler<br />

}<br />

Прихващането на Exception и всички негови наследници като цяло не е<br />

добра практика. За предпочитане е прихващането на по-конкретни групи<br />

от изключения като IOException или на един единствен тип изключение<br />

като например FileNotFoundException.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!