|
Программирование >> Программирование с использованием ajax
Таблица 5.2. Команды для явных преобразований
Здесь на месте val может указываться переменная практически любого типа (о том, могут ли данные команды работать с этим типом, будет сообщать сам компилятор). К сожалению, как видно в таблице, имена всех команд преобразования немного отличаются от используемых в С# имен типов; например, для выполнения преобразования в тип int нужно использовать команду Convert. ToInt32 (). Объясняется это тем, что данные команды принадлежат пространству имен System в .NET Framework, а не являются родными командами языка С#. Это, однако, позволяет использовать их не только в С#, но и в других совместимых с .NET языках. Важный аспект этих команд преобразования, на который обязательно нужно обратить внимание, состоит в том, что они всегда подразумевают выполнение проверки на предмет переполнения, и ни ключевые слова checked и unchecked, ни параметры свойств проекта на них никак не влияют. В следующем практическом занятии демонстрируется пример, охватывающий применение большинства из рассмотренных в этом разделе типов операций преобразования. В частности, в нем сначала объявляется и инициализируется ряд переменных различных типов, а затем выполняются операции преобразования между их типами как неявным, так и явным образом. пра1стическое занятие Преобразование типов 1. Создайте новое консольное приложение по имени ChOSExOl и сохраните его в каталоге С: \BegVCSharp\Chapter05. 2. Добавьте в файл Program, cs следующий код: static void Main(string [ ] args) { short shortResult, shortVal = 4; int integerVal = 67; long longResult; float floatVal = 10.5F; double doubleResult, doubleVal = 99.999; string stringResult, stringVal = 17 ; bool boolVal = true; Console.WriteLine( Variable Conversion Examples\n ); Примеры преобразования переменных doubleResult = floatVal * shortVal; Console.WriteLine( Implicit, -> double: {0} shortVal, doubleResult); Неявное преобразование shortResult = (short)floatVal; Console.WriteLine( Explicit, - > short: {0} - > Явное преобразование (1) - > {2} floatVal, floatVal, shortResult); StringResult = Convert.ToString(boolVal) + Convert.ToString (doubleVal) Console.WriteLine ( Explicit, - > string: \ {0}\ + \ {1}\ - > {2} , boolVal, doubleVal, stringResult); Явное преобразование longResult = integerVal + Convert.ToInt64(stringVal); Console.WriteLine ( Mixed, - > long: {0} + {1} - > {2} , integerVal, stringVal, longResult); Смешанное преобразование Console.ReadKey (); 3. Запустите приложение. На рис. 5.5 показан результат, который должен получиться. I ril*: ,C:/BeQVCSrjerp/Chept rt)5yCh05Ex01/ChO5Ex01 ЪтЮеЫ !.. Inplicit . Iplic It. Lxplicit. nixrd. Рис. 5.5. приложение ChOSExOl в действии Описание полученных результатов в этом примере присутствуют все рассмотренные до сих пор типы преобразований, как в простых операциях присваивания, подобных тем, что демонстрировались в приведенных ранее коротких примерах кода, так и в выражениях. Рассмотрению подлежат оба случая, поскольку к преобразованию типов может приводить обработка не только операций присваивания, но и каждой не унарной операции. Например: ShortVal * floatVal Здесь значение short умножается на значение float. В ситуациях, подобных этой, где не указано никакой явной операции преобразования, по возможности будет выполняться неявная операция преобразования. В данном примере единственной неяв- Сложные типы переменных Пока что рассматривались только все простые типы переменных, которые поддерживаются в С#. В этом разделе речь пойдет о трех немного более сложных (но очень полезных) видах переменных: перечислениях, структурах и массивах. Перечисления у каждого из рассмотренных до сих пор типов (за исключением string) имеется четко определенный набор допустимых значений. Правда, у типов вроде double он настолько велик, что может практически считаться бесконечным, но при этом он все равно остается строго фиксированным набором. Самым простым тому примером является тип bool, который может принимать только одно из двух значений - true или false. Встречается и много других ситуаций, в которых может оказаться необходимым иметь переменную, способную принимать какое-то одно значение из фиксированного набора результатов. Например, может потребоваться переменная типа orientation, способная хранить одно из таких значений, как north, south, east или west. В таких ситуациях применяются перечисления. Для orientation перечисления делают именно то, что нужно - позволяют определять тип, способный принимать только какое-нибудь одно значение из фиксированного набора, который предоставляется. Тогда все, что требуется сделать - создать свою собственную переменную типа перечисления по имени orientation, способную принимать одно из четырех возможных значений. ной операцией преобразования, в которой есть смысл, является преобразование типа short в тип float (поскольку для преобразования float в short требуется явная операция), поэтому именно она и будет использоваться. При желании, однако, это поведение можно переопределить, как показано ниже: ShortVal * (short)floatVal Это не означает, что в таком случае после операции будет возвращаться значение short. Из-за того, что результат перемножения двух значений short, скорее всего, будет превышать 32 767 (максимальное значение, которое может храниться в переменных шипа short), на самом деяе после этой операции будет возвращаться значение int. Явные преобразования, выполняемые с помощью такого синтаксиса приведения, имеют те же приоритеты, что и другие унарные операции (вроде префиксной формы операции ++), т.е. - высшие. При наличии операторов, в которых принимают участие смешанные типы, преобразование происходит при обработке каждой операции, в соответствии с приоритетами. Это означает, что могут иметь место и промежуточные преобразования: doubleResult = floatVal + (shortVal * floatVal); Здесь первой будет обрабатываться операция *, которая, как уже рассказывалось ранее, будет приводить к преобразованию shortVal во float. Далее будет обрабатываться операция +, которая не требует преобразования типов, поскольку имеет дело с двумя значениями float (а именно - floatVal и результатом вычисления shortVal * floatVal). И, наконец, последней будет обрабатываться операция =, при которой результат предыдущей операции, имеющий тип float, будет преобразовываться в тип double. Такой процесс преобразования может показаться на первый взгляд довольно сложным, но разделение выражений на отдельные части с принятием во внимание приоритетов операций должно позволить разобраться, что в нем к чему.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |