Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 42

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 36 37 38 39 40 41 < 42 > 43 44 45 46 47 48 .. 404 >> Следующая

78 _______________Глава 5

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

Вместо такой переписи битов из одной переменной в другую приходится использовать преобразования типов данных.

Существует два вида преобразования типов:

? Неявное преобразование — когда преобразование типа А в тип В возможно при любых обстоятельствах, а правила проведения такого преобразования достаточно просты, чтобы доверить его компилятору.

? Явное преобразование — когда преобразование типа А в тип В возможно только прн определенных обстоятельствах лнбо правила преобразования настолько сложны, что возникает необходимость выполнения каких-либо дополнительных действий.

Мы последовательно рассмотрим оба тнпа.

Неявные преобразования

Неявное преобразование не требует со стороны программиста никакой дополнительной работы и никакого дополнительного кода. Рассмотрим пример кода:

¦ varl » var2; .

Такое присваивание может включать в себя проведение неявного преобразования типов в том случае, если тип переменной var2 допускает проведение неявного преобразования в тип переменной varl; однако с тем же успехом в этом присваивании могут быть задействованы две переменные одного н того же типа, и тогда никакого неявного преобразования типов вообще не требуется.

Давайте рассмотрим пример.

Значения типа ushort и char являются фактически взаимозаменяемыми, поскольку оба онн предполагают хранение чисел в диапазоне между 0 и 65 535. Можно осуществлять преобразования этих типов друг в друга неявно, что иллюстрируется следующим кодом:

ushort destinationVarj char sourceVar ж 'a'; destinationVar = sour osf/arl

Console.WriteLine!'sourceVar val: (0)', sourceVar)j Console.WriteLineI'deetinationVar vali (01'; deatinationVar)j

В этом коде значение, хранящееся в переменной sourceVar, переносится в переменную deatinationVar. Затем две команды console. WriteLine о дают следующий выходной поток:

sourceVar val: а destinalionVar val: 97

Хотя в обеих переменных хранится одна н та же информация, она интерпретируется совершенно по-разному в зависимости от тнпа переменной.
Дополнительные сведения о переменных

79

Тип Допускает безопасное преобразование в
byte short, uehort, int, uint, long, ulong, float, double, decimal
sbyte short, int, long, float, double, decimal
short int, long, float, double, decimal
ushort int, uint, long, ulong, float, double, decimal
int long, float, double, decimal
uint long, ulong, float, double, decimal
long float, double, decimal
ulong float, double, decimal
float double
char ushort, int, uint, long, ulong, float, double, decimal

Для простых типов существует большое количество неявных преобразований; для типов bool и string неявных преобразований не существует, зато они имеются у численных типов. В таблице слева, приведенной для справки, показаны преобразования численных типов, которые могут выполняться компилятором неявно (ие забывайте, что значения типа char хранятся в виде чисел, поэтому мы рассматриваем char как численный тип).

Не волнуйтесь: эту таблицу ие придется заучивать наизусть, поскольку существует довольно простой способ определять, какие именно преобразования компилятор может выполнять неявно. Если вернуться к главе 3, то там можно нантн диапазоны допустимых значений для каждого простого численного тнпа. Правило неявных преобразований для рассматриваемых типов можно сформулировать следующим образом: любой тип А, диапазон допустимых значений которого целиком находится внутри диапазона допустимых значений типа В, может быть преобразован неявным образом в этот тип.

Это правило имеет очень простое обоснование. Если вы попытаетесь присвоить переменной некоторое значение, а это значение окажется выходящим за пределы тех значений, которые она может принимать, то возникнут определенные проблемы, Так, например, в переменной тнпа short могут храниться значения до 32 767, а максимально допустимое значение типа byte ограничено 255, поэтому если мы попытаемся преобразовать значение типа short в значение типа byte, это может создать проблему. Если значение типа short лежит в диапазоне между 256 и 32 767, то оно просто не уместится в одном байте.

Однако в том случае, если вам точно известно, что значение тнпа short меньше 255, должна ведь существовать какая-то возможность выполнить такое преобразование, не правда лн?

Простой ответ на этот вопрос гласит: да, такая возможность существует. Немного более развернутый ответ таков: да, такая возможность существует, но для этого необходимо воспользоваться явным преобразованием. Прн выполнении явного преобразования вы как бы говорите: “Хорошо, я предупрежден об опасности подобных действий, и я принимаю всю ответственность за возможные последствия на себя".
Предыдущая << 1 .. 36 37 38 39 40 41 < 42 > 43 44 45 46 47 48 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.