Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Пример 3.1Пример 3.2Преобразование типов Листинг 2.2. Преобразование типов 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("Примеры преобразования переменных") ; // Примеры преобразования переменных doubleResult = floatVal * shortVal; Console.WriteLine ("Неявные, - > double: {0} * {1} - > {2}", floatVal, shortVal, doubleResult); // Неявное преобразование shortResult = (short)floatVal; Console.WriteLine("Явные - > short: {0} - > {1}", floatVal, shortResult); // Явное преобразование stringResult = Convert.ToString(boolVal) + Convert.ToString(doubleVal); Console.WriteLine("Явные -> string:\"{0}\"+\"{1}\"->{2}", boolVal, doubleVal, stringResult); // Явное преобразование longResult = integerVal + Convert.ToInt64(stringVal); Console.WriteLine ("Смешанное - > long: {0} + {1} - > {2}", integerVal, stringVal, longResult); // Смешанное преобразование Console.ReadKey(); } Рис. 2.6. Приложение в действии В этом примере присутствуют все рассмотренные до сих пор типы преобразований, как в простых операциях присваивания, подобных тем, что демонстрировались в приведенных ранее коротких примерах кода, так и в выражениях. Рассмотрению подлежат оба случая, поскольку к преобразованию типов может приводить обработка не только операций присваивания, но и каждой не унарной операции. Например: shortVal * floatVal Здесь значение short умножается на значение float. В ситуациях, подобных этой, где не указано никакой явной операции преобразования, по возможности будет выполняться неявная операция преобразования. В данном примере единственной неявной операцией преобразования, в которой есть смысл, является преобразование типа short в тип float (поскольку для преобразования float в short требуется явная операция), поэтому именно она и будет использоваться. При желании, однако, это поведение можно переопределить, как показано ниже: shortVal * (short)floatVal Это не означает, что в таком случае после операции будет возвращаться значение short. Из-за того, что результат перемножения двух значений short, скорее всего, будет превышать 32767 (максимальное значение, которое может храниться в переменных типа short), на самом деле после этой операции будет возвращаться значение int. Явные преобразования, выполняемые с помощью такого синтаксиса приведения, имеют те же приоритеты, что и другие унарные операции (вроде префиксной формы операции ++), т.е. — высшие. При наличии операторов, в которых принимают участие смешанные типы, преобразование происходит при обработке каждой операции, в соответствии с приоритетами. Это означает, что могут иметь место и "промежуточные" преобразования: doubleResult = floatVal + (shortVal * floatVal); Здесь первой будет обрабатываться операция *, которая, как уже рассказывалось ранее, будет приводить к преобразованию shortVal во float. Далее будет обрабатываться операция +, которая не требует преобразования типов, поскольку имеет дело с двумя значениями float (а именно— floatVal и результатом вычисления shortVal * floatVal). И, наконец, последней будет обрабатываться операция =, при которой результат предыдущей операции, имеющий тип float, будет преобразовываться в тип double. Такой процесс преобразования может показаться на первый взгляд довольно сложным, но разделение выражений на отдельные части с принятием во внимание приоритетов операций должно позволить разобраться, что в нем к чему.
Дата добавления: 2014-10-10; просмотров: 287; Нарушение авторских прав Мы поможем в написании ваших работ! |