C# предоставляет пользователям, то есть нам с вами, большой выбор различных типов данных. Но что если нам нужно преобразовать один тип в другой? В этом нам с вами поможет приведение типов. В C# предусмотрено явное и неявное приведение типов. Неявное преобразование типов происходит автоматически и без какой-либо потери точности данных. Рассмотрим код:
long t;
int x = 10;
t = x;
Этот код легко скомпилируется, можете в этом наглядно убедиться. Но почему компилятор позволяет нам выполнить данную операцию? Более того, он сам ее делает за нас!
Для типа int допустимый диапазон значений составляет от -2147483648 до 2147483647, для типа long от -922337203685477508 до 922337203685477507. Что это означает? А означает это следующее: что при любом допустимом значении переменной x, это значение никак не сможет превысить допустимые значения типа long. Именно по этой причине компилятор позволяет нам выполнить данные действия. А что если мы попробуем немножко модифицировать наш код? В коде:
int t;
long x = 10;
t = x;
Компилятор тут же выдает ошибку. В этом случае, если нам действительно нужно сделать преобразование, то мы можем сообщить об этом компилятору, используя так называемое явное приведение типов. Важно знать, что в этом случае успех выполнения операции не гарантируется и вполне возможна потеря точности! Тем не менее, компилятор нам больше не помеха, он скинул с себя всю ответственность на наши с вами плечи. «Хочешь преобразовать double во float? Без проблем брат, но запомни, я тебя предупреждал, все может кончиться крайне плачевно!»
Как правильно записать. Вот синтаксис:
имя_переменной = (тип)имя_переменной;
Рассмотрим следующий пример. Допустим, у нас с вами есть здание. Нам дана суммарная площадь всех его квартир в квадратных метрах. И из учета того, что на одного человека должно приходиться 30,4 квадратных метров, программа должна подсчитать максимально возможное число жителей. Вот ее код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
double square = 835.6; //площадь здания
double squareperpeople = 30.4; //площадь на одного человека
int people; //максимальное число жителей
people = (int)(square / squareperpeople);
Console.WriteLine("Максимальное число людей в здании площадью " + square + " равно " + people);
Console.ReadKey();
}
}
}
Вообще вы можете преобразовать практически любой тип (о том какие именно типы разрешено преобразовывать а какие нет, вы можете прочитать на страницах MSDN).
Примеры для закрепления:
char ch = 'A';
int x = (int)ch; // результат 65
double pi = 3.14;
float pi2 = (float)pi; // результат 3.14
int y = 2419;
byte y2 = (byte)y; // результат 115
Как получаются значения? Откуда они берутся? Давайте посмотрим. Есть следующий код:
int y = 2419;
byte y2 = (byte)y;
Результат будет 115. Вот как можно его получить. Зная, что тип byte может принимать значения от -128 до 127, легко подсчитать, что в сумме этот тип может принять 256 значений (включая 0). Так вот, умножим это значение на 9 (попробуйте догадаться, для чего мы это делаем), получим 2304. Прибавим к этому значению 115 и получим 2419 Я надеюсь что теперь вы понимаете что эти значения отнюдь не случайны.
Как преобразовать произвольный тип в строку? Со строками дела обстоят чуть-чуть иначе, нежели с другими типами. Тут тоже нет ничего сложного, это нужно просто запомнить. Существует специальный метод, позволяющий преобразовать любой тип в строку. Рассмотрим его применение в следующем коде:
int y = 530;
string str = y.ToString(); // преобразовать "у" в строку
Console.WriteLine(str);
Результатом выполнения этой программы будет «530». Как видите, чтобы преобразовать «у» в строку, нам потребовалось поставить после него оператор «.» (очень важный оператор в C#, разговоры о нем у нас впереди) и из списка возможных методов выбрать нужный нам «ToString()». Данный метод будет работать с абсолютно любым типом данных, попробуйте и убедитесь сами
Задания к лабораторной работе 2:
1. Изучить предлагаемую теорию.
2. Записать и откомпилировать программы, использующие графический интерфейс, ввод, вывод различных типов данных, рассмотренных в лабораторной работе 2.
3. Выполнить домашние задания (тема 2, тема 10), согласно номеру варианта.