Net framework 5, а также среды Visual Studio 2012 и C#



Download 6,27 Mb.
Pdf ko'rish
bet106/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   102   103   104   105   106   107   108   109   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C


Глава.5 .Примитивные,.ссылочные.и.значимые.типы
Здесь 
b
и 200 преобразуются в 32-разрядные числа и суммируются; резуль-
тат равен 300. Затем при преобразовании 300 в 
Byte
генерируется исключение 
OverflowException
. Если приведение к типу 
Byte
вывести из оператора 
checked

исключения не будет:
b = (Byte) checked(b + 200); // b содержит 44; нет OverflowException
Наряду с операторами 
checked
и 
unchecked
в C# есть одноименные инструк-
ции, позволяющие включить проверяемые или непроверяемые выражения внутрь 
блока:
checked { // Начало проверяемого блока
Byte b = 100; 
b = (Byte) (b + 200); // Это выражение проверяется на переполнение
} // Конец проверяемого блока
Кстати, внутри такого блока можно задействовать оператор 
+=
с 
Byte
, который 
немного упростит код:
checked { // Начало проверяемого блока
Byte b = 100; 
b += 200; // Это выражение проверяется на переполнение
} // Конец проверяемого блока
ВниМание
Установка.режима.контроля.переполнения.не.влияет.на.работу.метода,.вызываемого.
внутри.оператора.или.инструкции.checked,.так.как.действие.оператора.(и.инструк-
ции).checked.распространяется.только.на.выбор.IL-команд.сложения,.вычитания,.
умножения.и.преобразования.данных .Например:
checked {
// Предположим, SomeMethod пытается поместить 400 в Byte
SomeMethod(400);
// Возникновение OverflowException в SomeMethod
// зависит от наличия в нем операторов проверки
}
Я видел немало вычислений, генерирующих непредсказуемые результаты. 
Обычно это случается из-за неправильного ввода данных пользователем или же 
из-за возвращения неожиданных значений переменных. Итак, я рекомендую про-
граммистам соблюдать следующие правила при использовании операторов 
checked
и 
unchecked
.
‰
Используйте типы со знаком (
Int32
и 
Int64
) вместо числовых типов без знака 
(
UInt32
и 
UInt64
) везде, где это возможно. Это позволит компилятору выяв-
лять ошибку переполнения. Кроме того, некоторые компоненты библиотеки 
классов (например, свойства 
Length
классов 
Array
и 
String
) жестко запро-
граммированы на возвращение значений со знаком, и передача этих значений 
в коде потребует меньшего количества преобразований типа (а следовательно, 


149
Примитивные.типы.в.языках.программирования
упростит структуру кода и его сопровождение). Кроме того, числовые типы без 
знака несовместимы с CLS.
‰
Включайте в блок 
checked
ту часть кода, в которой возможно переполнение из-
за неверных входных данных, например при обработке запросов, содержащих 
данные, предоставленные конечным пользователем или клиентской машиной. 
Возможно, также стоит перехватывать исключение 
OverflowException
, чтобы 
ваше приложение могло корректно продолжить работу после таких сбоев.
‰
Включайте в блок 
unchecked
те фрагменты кода, в которых переполнение не 
создает проблем (например, при вычислении контрольной суммы).
‰
В коде, где нет операторов и блоков 
checked
и 
unchecked
, предполагается, что 
при переполнении 
должно
происходить исключение. Например, при вычислении 
простых чисел входные данные известны, а переполнение является признаком 
ошибки.
В процессе отладки кода установите параметр компилятора 
/checked+
. Выполне-
ние приложения замедлится, так как система будет контролировать переполнение во 
всем коде, не помеченном ключевыми словами 
checked
или 
unchecked
. Обнаружив 
исключение, вы сможете легко обнаружить его и исправить ошибку. В окончательной 
сборке приложения установите параметр 
/checked-
, что ускорит выполнение при-
ложения; исключения при этом генерироваться не будут. Для того чтобы изменить 
значение параметра 
checked
в Microsoft Visual Studio, откройте окно свойств вашего 
проекта, перейдите на вкладку 
Build
, щелкните на кнопке 
Advanced
и установите 
флажок 
Check
for
arithmetic
overflow/underflow
, как это показано на рис. 5.1.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   102   103   104   105   106   107   108   109   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish