C# - Главная Пространство имен
► System ► Microsoft Для учеников (начинающих)
► Видео уроки ► Обучение ► Примеры программ ► Секреты в Си Шарп Для профессионалов
► Обучение ► Примеры программ ► Задачки - для тебя! |
Проверка кодов возврата функций и методовРассмотрим случай, когда мы вызываем метод обработки информации, выполняющего деление первого своего параметра на второй.
using System; namespace DivByZero { class DivByZrolApp static int Divide(int x, int y) { int result; result = x / y; } static void Main{string[] args) { int j; for (int i = -3; i <=3; i++) { j = Divide{10, i); // Ошибка деления на нуль } Console.ReadLine(); } } } Для исправления этой ошибки изменим метод Divide, чтобы он проверял значение делителя перед выполнением операции деления: static int Divide(int x, int у) { int result; if (y != 0) result = x / у; return result; } else return 0; Теперь ошибка деления на нуль не возникнет, так как, если делитель равен нулю, деление не выполняется. Однако метод Divide должен каким-то образом просигнализировать вызывающему методу о возникновении ошибки. Наша реализация этого метода при ошибке возвращает нулевое значение, однако очевидно, это не лучший способ. В самом деле, нулевое значение возвращается и в том случае, если делитель равен нулю, а эта ситуация не является ошибочной. Заметим, что возвращение особого значения методом или функцией используется очень часто в других языках программирования в качестве признака ошибки. Предполагается, что после обращения к функции операционной системы (такой, например, как открытие файла, чтение блока данных из этого файла и т. п.) вызывающая программа проверяет код возврата, предпринимая при возникновении ошибки какие-либо действия. Вот как мы можем использовать модифицированный вариант метода Divide, возвращающий нулевое значение при возникновении ошибки деления на нуль: j = Divide(10, i) ; if (j == 0) Console.WriteLinef "Ошибка деления на нуль"); В реальных программах встречается довольно большая глубина вложенности функций и методов, когда один метод вызывает другой, тот, в свою очередь, обращается к третьему и четвертому и т. д. Строки листинга программы, предназначенные для обработки кодов возврата для всех этих функций или методов, загромождают исходный текст программы, делая его «нечитаемым». Кроме того, программист может по забывчивости опустить проверку кода возврата какой-либо одной функции или метода, что приведет к аварийному завершению приложения во время его работы.
Применение механизма исключений
Классические схемы обработки ошибок, основанные на проверке допустимости параметров и анализе кодов возврата функций и методов, обладают существенными недостатками. Практически все современные языки программирования снабжены мощным средством обработки ошибок, основанным на использовании так называемых исключений (exceptions). He является исключением (простите за тавтологию) и язык программирования С#. Средства обработки исключений в языке С# делают исходный текст программ понятнее и проще. С их помощью программист может организовать структурную обработку ошибок, как прогнозируемых, так и возникающих неожиданно. Система обработки ошибок, использованная в библиотеке классов Microsoft .NET Framework, работает исключительно с применением механизма исключений. Поэтому, какую бы программу вы ни разрабатывали на языке С#, вы обязательно столкнетесь с необходимостью обрабатывать или вызывать исключения (в других языках программирования это не так; программы C++, например, можно создавать и без обработки исключений).
Просмотров: 4585 |