Обробка незавершених завдань за допомогою finally в Visual C # (Sharp)

Проблему зайвої розкрутки стека найпростіше вирішити за допомогою ключового слова finally, яке гарантує виконання певного фрагмента коду, незалежно від того, чи було викинуто виняток У наступному фрагменті паза код з рис 56, модифікований із застосуванням ключового слова finally Цей код присвоює члену даних depth правильне значення,

class CallingExample { int depth

public void CalledCalledMethodO { depth = 2

throw new Exception О

&gt&nbsp

public void CalledMethodO { depth = 1

try {

CalledCalledMethod()

}

finally { depth =1

}

}

public void Method() { depth = 0

try {

CalledMethod()

}

finally { depth =0

}

&gt&nbsp

public int GetDepthO { return depth

}

}

class Tests {

void TestCallingExample() { CallingExample els = null try {

els = new CallingExample() elsMethod()

}

catch (Exception) { }

ConsoleWriteLine(&quotDepth is (&quot + elsGetDepth() + &quot)&quot)

&gt&nbsp

public void RunAll() { TestCallingExample()

}

}

У даному прикладі кожне ключове слово finally повязано з блоком try При іользованіі ключового слова finally асоціювати блок catch з блоком try немає необхідності Якщо виконання програми переходить в блок try, по виходу з блоку, незалежно від того, чи було його виконання успішним або відбулося ілюченіе, виконується код в блоці finally Таким чином, якщо відбувається рарутка стека, то перш ніж виняток обробляється в якомусь іншому місці,

6  Зак 555

можна або виконати скидання стану, або присвоїти йому несуперечливе значення

ПРИМІТКА

При виклику блоку finally ми не знаємо, чи викликається він внаслідок виключення або після успішного виконання коду Тому не можна припускати, що блок finally викликається єдино внаслідок виключення

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*