1 / 9

Обработка исключений в C#

Обработка исключений в C#. Единая техника обнаружения ошибок времени выполнения и передачи информации о них. Что было?. Собственная логика выявления для каждого приложения. Субъективный подход программиста (или группы разработчиков) к проблеме обработки исключений.

Download Presentation

Обработка исключений в C#

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Обработка исключений в C# Единая техника обнаружения ошибок времени выполнения и передачи информации о них.

  2. Что было? • Собственная логика выявления для каждого приложения. • Субъективный подход программиста (или группы разработчиков) к проблеме обработки исключений. • Нет единого стандарта (разные методики и встроенные средства в Win32 API, COM, MFC)… • Привязка методики к конкретному языку, алгоритму, проекту.

  3. Вуаля - Structured Exception Handling • В .NET было приято навести порядок буквально во всём. • Единый и хорошо продуманный подход к обработке ошибок. • Единый подход для всех языков .NET. • Бонус – генерация и перехват исключений между двоичными файлами, AppDomains и компьютерами в независимом от языка стиле. • Как – RFTM.

  4. System.Exception. Основные свойства. • HelpLink – URL файла справки с описанием ошибки. • Message – текстовое описание ошибки (Read Only). • Source – Имя объекта (или приложения), сгенерировавшего ошибку. • StackTrace – Последовательность вызовов, которые привели к ошибке (Read Only). • Inner exception – Используется для сохранения сведений об ошибке между сериями исключений.

  5. Как и когда использовать. • Исключения используются тогда, когда выполнение метода должно быть немедленно прервано. • При проектировании класса необходимо определиться, где и как будут использоваться исключения. • В .NET уже определены различные стандартные исключения (ArgumentOutOfRangeException, IndexOutOfRangeException, StackOverflowException и др).

  6. Пришёл, проник и обезвредил… public static int Main (string[] args) { MyObject a = new MeObject(); try { a.DoSmthUnreal(); if (a.IsDead()) { throw new Exception(“Your object is dead!”); } } catch(Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } } «Просто catch»будет обрабатывать вообще все сгенерированные исключения.

  7. Хотим свой класс для обработки исключений. public class MyObjectIsDead : Exception { private string ObjName; public MyObjectIsDead() {} public MyObjectIsDead(string ObjName) { this.ObjName = ObjName; } public override string Message { get { string msg = base.Message; if (ObjName != null) { msg += ObjName; } return msg; } } } catch(MyObjectIsDead e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); }

  8. Можно проще! public class MyObjectIsDead : Exception { public MyObjectIsDead() {} public MyObjectIsDead(string message) : base(message) {} public MyObjectIsDead(string message, Exception innerEx) : base(message, innerEx) {} }

  9. Что ещё… • Обработка нескольких исключений – просто несколько блоков catch. • Необязательный блок finally после try/catch – будет выполнен независимо от того, сработало ли исключение (освобождение ресурсов, отключение от БД…). • Не допускать не отловленных исключений (если нет желания вести неприятные диалоги с отладчиком)!! • Не допускать бесконечных исключений (не помещать генерацию того же исключения в catch)!! • Всегда чётко продумывать, что нужно делать с отловленным исключением. • Не использовать исключения без острой необходимости. • RFTM (2й семестр)…

More Related