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

С# - Ватсон К.

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


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

Как и предполагает их название, явные преобразования выполняются в тех случаях, когда мы явным образом обращаемся к компилятору с просьбой преобразовать значение одного тнпа в другой. Именно поэтому для нх выполнения требуется наличие дополнительного кода, причем формат этого кода может варьироваться в зависимости от конкретного метода выполнения преобразования. Прежде чем приступить к рассмотрению кода, применяемого для выполнения явных преобразований, давайте узнаем, что произойдет в том случае, если для явного преобразования не будет использоваться никакого кода.
80

Глава 5

В качестве примера, несколько модифицировав код из предыдущего раздела, попытаемся преобразовать значение тнпа short в значение тнпа byte:

byte destinationvar;

short sourceVar * 7| '

deetinationVar » sourceVar;

Console.WriteLine('sourceVar val; (0)*, sourceVar)j Console.WriteLine['destinationvar val: (0)', deetinationVar)

При попытке выполнить компиляцию этого кода будет выведено следующее сообщение об ошибке:

Cannot implicitly convert type 'short1 to ‘byte’

(Невозможно неявно преобразовать тип ‘short’ в ‘byte’)

К счастью для нас, компилятор C# умеет обнаруживать отсутствие необходимых явных преобразовании!

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

(destinationTvve) sourceVar

Эта запись приведет к преобразованию значения переменной sourceVar к типу

destina cioniype.

Обратите внимание, что такое возможно только в определенных ситуациях. Для типов, мало похожих друг на друга или вообще не имеющих ничего общего, преобразование типов с помощью приведения, вероятнее всего, не будет определено.

Теперь можно модифицировать наш пример таким образом, чтобы -добиться преобразования нз типа short в тип byte:

byte destinationvar; short sourceVar » 7j deetinationVar = {byte)sourceVar;

Console.WriteLine!'sourceVar val: (0)', sourceVar);

Console.WriteLine('destinationvar val: (0)', destinationvar);

Результатом будет:

sourceVar val: 7 deslinationVar val: 7

А что происходит в тех случаях, когда мы пытаемся загнать в переменную значение, которое там не помещается? Давайте модифицируем нашу программу:

byte destinationVan short sourceVar » 281} destinationvar- (byte)sourceVar;

Console,WriteLine('sourceVar val: {Q}', sourceVar);

Console,WriteLine('destinationvar val: (0)', destinationvar);

В этом случае мы получим следующий результат:

sourceVar val: 281 deslinationVar val: 25
Дополнительные сведения о переменных__________________________________________________________81

Итак, что же произошло? Посмотрим на двоичное представление этих двух чисел, а также максимально допустимого значения для типа byte, равного 255:

231 = 100011001 25 = 000011001 255 = 011111111

Легко заметить, что потеряй самый левый бит исходного значения. Немедленно возникает вопрос: каким образом это можно предсказать? Совершенно очевидно, что будут встречаться ситуации, когда придется явно приводить одни тип к другому, и было бы неплохо знать заранее, какие данные при этом будут утрачиваться. Не умея этого делать, можно столкнуться с серьезными ошибками, например, в приложениях дня работы с банковскими счетами.

Один из способов предвидеть потерю бнтов — проверка исходного значения и его сравнение с известными предельными значениями новой переменной. Каким образом это можно выполнить, будет рассказано в следующей главе при объяснении логики работы приложений н управления порядком выполнения. Но имеется и другой способ, который заставляет систему во время работы уделять особое внимание данному преобразованию. Попытка присвоить переменной слишком большое значение приводит к переполнению, и это как раз та ситуация, которую требуется контролировать.

Контекст проверки на переполнение задается с помощью двух ключевых слов: checked (проверяемое) и unchecked (непроверяемое), которые используются следующим образом:

checked(выражение) unchecked{выражение)

Итак, давайте потребуем осуществить проверку на переполнение в предыдущем примере:

byte destinationvarj short eourceVar « 2811

destinationvar ¦= checked! (byte) eourceVar);

Console.WriteLine(“sourceVar val: (0 > ', BOurceVar)t Console.WriteLinel'destinationvar val: (0)', destinationvar);

Процесс выполнения кода будет прерван появлением сообщения об ошибке (см. рис.слева) (этот пример откомпилирован в проекте с названием

Overf lowCheck),

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

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

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

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

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