.NET исключения: иерархия
Механизм обработки исключительных ситуаций дает возможность работать только с объектами класса Exception и производными от него. Хотя захватывать исключения типов, не принадлежащих к данному классу – применяя обработчик catch без параметров. Это необходимо в основном тогда, когда есть участки кода, написанного на другом языке, в котором не требуется, чтобы все исключения происходили от Exception в .NET Framework.
Класс Exception пространства имен System – один из базовых классов иерархии исключений .NET Framework. Самые важные производные классы Exception: ApplicationException – базовый класс; он расширяется для создания типов данных исключений самими разработчиками. Из таких исключений (большинства их) приложения могут восстанавливаться и продолжать работу.
SystemException – генерируется CLR в любое время работы приложения. Некоторые такие исключения во время прогона (производные от класса SystemException) можно избежать просто с помощью корректного кодирования. К примеру, если приложение хочет получить доступ к элементу массива с некорректным индексом, то CLR выдаст исключение IndexOutOfRangeException. Аналогично и со ссылкой со значением null (то есть когда приложение пытается получить ссылку на объект для работы с еще не созданным объектом). В этом случае сгенерируется исключение NullReferenceException. Приложения на C# по рекомендациям Microsoft не должны захватывать или выдавать SystemException, так как программы поле этого могут не возобновлять свою работу.
Основным преимуществом применения иерархии обработки исключений является тот факт, что обработчик catch имеет возможность работать с конкретными исключениями или применять тип базового класса для захвата связанных. К примеру, можно использовать catch с параметром исключения типа Exception для захвата любого исключения, так как этот класс базовый для всех. Именно с помощью этого и достигается полиморфная обработка исключений. Если тип захватываемого исключения не указывается, то обработчик может и не работать с ним дальше – не всегда требуется доступ.
Применение наследования при работе исключениями дает возможность обработчику работать не только с исключениями производных классов отдельно, но также и захватывать все типы базового класса с комментариями. Это можно использовать, к примеру, тогда, когда поведение обработки будет одинаково для всех классов.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.