Программирование >>  Обработка исключительных ситуаций 

1 ... 11 12 13 [ 14 ] 15 16 17 ... 142


Преобразование более коротких, чем i nt, типов выполняется при присваивании. Обратите внимание на то, что неявного преобразования из float и double в decimal не существует.

ПРИМЕЧАНИЕ-

Преобразование из типов int, ui nt и long в тип float и из типа long в тип double может вызвать потерю точности, но не потерю значимости. В процессе других вариантов неявного преобразования никакая информация не теряется.

Введение в исключения

При вычислении выражений могут возникнуть ошибки, например, переполнение, исчезновение порядка или деление на ноль. В С# есть механизм, который позволяет обрабатывать подобные ошибки и таким образом избегать аварийного завершения программы. Он так и называется: механизм обработки исключительных ситуаций (исключений).

Если в процессе вычислений возникла ошибка, система сигнализирует об этом с помощью специального действия, называемого выбрасыванием (генерированием) исключения. Каждому типу ошибки соответствует свое исключение. Поскольку С# - язык объектно-ориентированный, исключения являются классами, которые имеют общего предка - класс Excepti on, определенный в пространстве имен System.

Например, при делении на ноль будет выброшено (сгенерировано) исключение с длинным, но понятным именем DivideByZeroException, при недостатке памяти - исключение OutOfMemoryException, при переполнении - исключение OverflowException.

ПРИМЕЧАНИЕ-

Стандартных исключений очень много, тем не менее программист может создавать и собственные исключения на основе класса Exception.

Программист может задать способ обработки исключения в специальном блоке кода, начинающемся с ключевого слова catch ( перехватить ), который будет автоматически выполнен при возникновении соответствующей исключительной ситуации. Внутри блока можно, например, вывести предупреждающее сообщение или скорректировать значения величин и продолжить выполнение программы. Если этот блок не задан, система выполнит действия по умолчанию, которые обычно заключаются в выводе диагностического сообщения и нормальном завершении программы.

Процессом выбрасывания исключений, возникающих при переполнении, можно управлять. Для этого служат ключевые слова checked и unchecked. Слово checked включает проверку переполнения, слово unchecked выключает. При выключенной проверке исключения, связанные с переполнением, не генерируются, а результат операции усекается. Проверку переполнения можно реализовать для отдельного выражения или для целого блока операторов, например:

а = checked (b + с); для выражения

unchecked { для блока операторов

а = b + с;



Основные операции С#

В этом разделе кратко описаны синтаксис и применение всех операций С#, кроме некоторых первичных, которые рассматриваются в последующих главах при изучении соответствующего материала.

Инкремент и декремент

Операции инкремента (++) и декремента (--), называемые также операциями увеличения и уменьшения на единицу, имеют две формы записи - префиксную, когда знак операции записывается перед операндом, и постфиксную. В префиксной форме сначала изменяется операнд, а затем его значение становится результирующим значением выражения, а в постфиксной форме значением выражения является исходное значение операнда, после чего он изменяется. Листинг 3.2 иллюстрирует эти операции.

Листинг 3.2. Операции инкремента и декремента using System;

namespace ConsoleApplicationl { class Classl

{ static void MainO

int x = 3. у = 3;

Console.Write( Значение префиксного в1ражения: ); Consolе.WriteLineC ++х );

Console.Write( Значение х после приращения: ); Console.WriteLineC х );

Console.WriteC Значение постфиксного выражения: ); Console.WriteLineC у++ );

Console.WriteC Значение у после приращения: ); Console.WriteLineC у );


Проверка не распространяется на функции, вызванные в блоке. Если проверка переполнения включена, говорят, что вычисления выполняются в проверяемом контексте, если выключена - в непроверяемом. Проверку переполнения выключают в случаях, когда усечение результата операции необходимо в соответствии с алгоритмом.

Можно задать проверку переполнения во всей программе с помощью ключа компилятора /checked, это полезно при отладке программы. Поскольку подобная проверка несколько замедляет работу, в готовой программе этот режим обычно не используется.

Мы подробно рассмотрим исключения и их обработку в разделе Обработка исключительных ситуаций (см. с. 89).



Операции отрицания

Арифметическое отрицание (унарный минус -) меняет знак операнда на противоположный. Стандартная операция отрицания определена для типов int, long, float, double и decimal. К величинам других типов ее можно применять, если для них возможно неявное преобразование к этим типам (см. рис. 3.1). Тип результата соответствует типу операции.

ПРИМЕЧАНИЕ-

Для значений целого и финансового типов результат достигается вычитанием исходного значения из нуля. При этом может возникнуть переполнение. Будет ли при этом выброшено исключение, зависит от контекста.

Результат работы программы:

Значение префиксного втражения: 4 Значение х после приращения: 4 Значение постфиксного выражения: 3 Значение у после приращения: 4

Стандартные операции инкремента существуют для целых, символьных, вещественных и финансовых величин, а также для перечислений. Операндом может быть переменная, свойство или индексатор (мы рассмотрим свойства и индексаторы в свое время, в главах 5 и 7).

Операция new

Операция new служит для создания нового объекта. Формат операции: new тип ( [ аргументы ] )

С помощью этой операции можно создавать объекты как ссылочных, так и значимых типов, например:

object z = new objectO:

int i = new int(): II то же самое, что int i = 0;

Объекты ссылочного типа обычно формируют именно этим способом, а переменные значимого типа чаще создаются так, как описано ранее в разделе Переменные .

При выполнении операции new сначала выделяется необходимый объем памяти (для ссылочных типов в хипе, для значимых - в стеке), а затем вызывается так называемый конструктор по умолчанию, то есть метод, с помощью которого инициализируется объект. Переменной значимого типа присваивается значение по умолчанию, которое равно нулю соответствующего типа. Для ссылочных типов стандартный конструктор инициализирует значениями по умолчанию все поля объекта.

Если необходимый для хранения объекта объем памяти выделить не удалось, генерируется исключение OutOfMemoryException.



1 ... 11 12 13 [ 14 ] 15 16 17 ... 142

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика