Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры_ООП.docx
Скачиваний:
5
Добавлен:
18.09.2019
Размер:
114.62 Кб
Скачать
  1. Преобразование типов, определяемых пользователем с помощью конструкторов и операций преобразования.

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

  • Преобразование int в short – если число с типом данных int слишком большое, то при преобразовании в short потеряются некоторые данные;

  • Преобразование int в uint и uint в int – такая же причина;

  • Преобразование float в int – логично, что потеряются все данные, которые находились после запятой;

  • Преобразование любых числовых типов в char – ясно, что тут будут потеряны все данные.

Логично, что компилятор понимает, что в таких случаях могут быть ошибки программиста, поэтому данные преобразования не проводит – генерирует ошибки. Но сам программист может заставить компилятор провести такое приведение типов, используя приведения (costs):

Long znach = 12345;

Int I = (int)zhach;

Здесь в скобки заключаем тот тип, к которому необходимо привести значение, которое приводится после скобок. Если вдруг значение переменной znach будет очень большим (то есть – больше, чем максимально возможное в типе int), при явном преобразовании компилятор ошибки не выдаст (понадеется на программиста), а вы потеряете данные.

Для того, чтобы все-таки ошибка появлялась в том случае, если переменная имеет слишком большое значение, необходимо использовать специальную операцию, которую так и называют – проверка (то есть checked):

Long zhack 1234567890;

Int I = checked((int)znach);

Так как явное преобразование типов не всегда может завершиться удачно, такая операция, как checked позволяет программистам своевременно выполнять проверку таких преобразований.

Явное преобразование типов – это мощный механизм, с помощью которого можно преобразовать почти все типы данных друг в друга. Но таким механизмом нельзя преобразовать тип данных bool (логический тип) ни в какой другой тип данных.

Еще просто пример на С# явного преобразования:

class Test

{

static void Main()

{

double x = 1234.7;

int a;

// Cast double to int.

a = (int)x;

System.Console.WriteLine(a);

}

}

// Output: 1234

  1. Неявное преобразование типов

При неявном приведении преобразование типов происходит автоматически, по правилам, заложенным в данном языке программирования. Не требуется никакого специального синтаксиса, поскольку преобразование безопасно для типов и данные не теряются. Примерами могут служить преобразования от меньшего к большему целому типу, и преобразования из производных классов в базовые классы. Для встроенных числовых типов неявное преобразование можно выполнить, сохраняемое значение может уместиться в переменной без обрезания или округления до ближайшего. Например, переменная типа long (8-байтное целое) может хранить любое значение, которое может хранить int (4 байта в 32-разрядном компьютере). В следующем примере компилятор неявно преобразует значение справа в тип long перед присвоением его типу bigNum.

int num = 2147483647;

long bigNum = num;

Полный список всех неявных числовых преобразований:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]