четверг, 24 июня 2010 г.

Явное преобразование типов


В прошлой статье по C# я рассмотрел какие бывают преобразования типов данных в C# (два больших вида) – неявные и явные. В тот раз я более подробно рассмотрел неявное преобразование. Давайте сегодня остановимся на явном преобразовании.

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

Преобразование 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 позволяет программистам своевременно выполнять проверку таких преобразований.

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



Явно преобразовывать можно не только отдельные значения (такие преобразования я приводил выше), но можно преобразовывать и элементы массива и элементы структуры таким же образом.

Так как в C# существует тип данных null (нулевой, ничто), то захочется приводить данные из такого типа. Но не забывайте, что если вы будете преобразовывать данные, имеющие тип null в другой числовой тип (например – int), то есть которые null-типов данных не допускает, то компилятор выдаст ошибку.

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


3 комментария: