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. Обработка на изключения 425<br />

Конструкцията се състои от един try блок, обгръщащ валидни конструкции<br />

на C#, които могат да хвърлят изключения, следван от един или няколко<br />

catch блока, които обработват съответно различни по тип изключения. В<br />

catch блока ExceptionType трябва да е тип на клас, който е наследник на<br />

класа System.Exception. В противен случай ще получим проблем при<br />

компилация. Изразът в скобите след catch играе роля на декларация на<br />

променлива и затова вътре в блока catch можем да използваме обекта<br />

objectName, за да извикваме методите или да използваме свойствата на<br />

изключението.<br />

Прихващане на изключения – пример<br />

Нека сега направим така, че методът в горния пример сам да обработва<br />

изключенията си. За целта заграждаме целия проблемен код, където могат<br />

да се хвърлят изключения с try-catch блок и добавяме прихващане на<br />

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

static void ReadFile(string filename)<br />

{<br />

// Exceptions could be thrown in the code below<br />

try<br />

{<br />

TextReader reader = new StreamReader(filename);<br />

string line = reader.ReadLine();<br />

Console.WriteLine(line);<br />

reader.Close();<br />

}<br />

catch (FileNotFoundException fnfe)<br />

{<br />

// Exception handler for FileNotFoundException<br />

// We just inform the user that there is no such file<br />

Console.WriteLine("The file '{0}' is not found.", filename);<br />

}<br />

catch (IOException ioe)<br />

{<br />

// Exception handler for other input/output exceptions<br />

// We just print the stack trace on the console<br />

Console.WriteLine(ioe.StackTrace);<br />

}<br />

}<br />

Добре, сега методът работи по малко по-различен начин. При възникване<br />

на FileNotFoundException по време на изпълнението на конструкцията new<br />

StreamReader(string fileName) средата за изпълнение (Common<br />

Language Runtime - CLR) няма да изпълни следващите редове, а ще<br />

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

catch (FileNotFoundException fnfe):

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

Saved successfully!

Ooh no, something went wrong!