
Исключения.ppt
- Количество слайдов: 7
Исключительные ситуации
Схема обработки исключений Try { //охраняемый блок throw (new My. Exception(); ) } catch(My. Exeption e) { … } catch(Exeption e){ … } finally { … }
Схема Бертрана обработки исключений Принцип «проектирования по контракту» . Вызывающий модуль обязан обеспечить истинность предусловия, необходимого для корректной работы вызванного модуля. Вызванный модуль обязан гарантировать истинность постусловия по завершении своей работы. Действия обработчика: Retry - попытаться внести некоторые коррективы и вернуть управление охраняемому модулю, который может предпринять очередную попытку выполнить свой контракт. Rescue, выбрасывая исключение и передавая управление вызывающему модулю, который и должен теперь попытаться исправить ситуацию.
Схема с возобновлением public void Pattern(){ do { try { bool Danger = false; Success = true; Make. Job(); Danger = Check. Danger(); if (Danger) throw (new My. Exception()); Make. Last. Job(); } catch (My. Exception me) { if(count > maxcount) throw(new My. Exception("Три попытки были безуспешны")); // throw(new My. Exception(“Три попытки были безуспешны", me)); Success = false; count++; Console. Write. Line("Попытка исправить ситуацию!"); level +=1; } }while (!Success); }
public class My. Exception : Exception{ public My. Exception() {} public My. Exception (string message) : base(message) {} public My. Exception (string message, Exception e) : base(message, e) {} } class Excepts{ Random rnd = new Random(); int level = -10; bool Success; int count =1; // число попыток выполнения const int maxcount =3; void Make. Job(){ Console. Write. Line("Подготовительны е работы завершены"); } bool Check. Danger(){ int low = rnd. Next(level, 10); if ( low > 6) return(false); return(true); } void Make. Last. Job(){ Console. Write. Line("Все работы завершены успешно"); } } static void Main(string[] args) { Excepts ex 1 = new Excepts(); try { ex 1. Pattern(); } catch (Exception e) { Console. Write. Line("исключительная ситуация при вызове Pattern"); // Print. Properties(e); Console. Write. Line(e. To. String()); } }
Класс Exception n Message - строка, задающая причину возникновения исключения. Значение свойства устанавливается в конструкторе, когда создается объект, задающий исключение; n Help. Link - ссылка (URL) на файл, содержащий подробную справку о возможной причине возникновения исключительной ситуации и способах ее устранения; n Inner. Exception - ссылка на внутреннее исключение. Когда обработчик выбрасывает новое исключение для передачи обработки на следующий уровень, то текущее исключение становится внутренним для вновь создаваемого исключения; n Source - имя приложения, ставшего причиной исключения; n Stack. Trace - цепочка вызовов - методы, хранящиеся в стеке вызовов в момент возникновения исключения; n Target. Site - метод, выбросивший исключение. n Метод Get. Base. Exception. При подъеме по цепочке вызовов он позволяет получить исходное исключение - первопричину возникновения последовательности выбрасываемых исключений.
static public void Print. Properties(Exception e){ Console. Write. Line("Свойства исключения: "); Console. Write. Line("Target. Site = {0}", e. Target. Site); Console. Write. Line("Source = {0}", e. Source); Console. Write. Line("Message = {0}", e. Message); if (e. Inner. Exception == null) Console. Write. Line("Inner. Exception = null"); else Console. Write. Line("Inner. Exception = {0}", e. Inner. Exception. Message); Console. Write. Line("Stack. Trace = {0}", e. Stack. Trace); Console. Write. Line("Get. Base. Exception = {0}", e. Get. Base. Exception()); }
Исключения.ppt