Зачем нам вообще необходимы явные преобразования? Для тех случаев, когда у нас компилятор сам не может преобразовать типы (при этом возникает ошибка). Давайте более подробно рассмотрим такие ситуации:
· Преобразование 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 (логический тип) ни в какой другой тип данных.