Из MSDN
:
Явные преобразования (приведения): для явных преобразований требуется оператор трансляции. Кастинг необходим, когда информация может быть потеряна при конверсии или когда преобразование может не удаться по другим причинам. Типичные примеры включают числовое преобразование в тип с меньшей точностью или меньшим диапазоном и преобразование экземпляра базового класса в производный класс.
blockquote>Рассмотрим следующий пример:
double a = 2548.3; int b; b = (int)a; //2548 --> information (.3) lost in the conversion
А также:
Листинг - это способ явного информирования компилятора о том, что вы намерены сделать преобразование, и что вы знаете, что может произойти потеря данных.
blockquote>Вы можете использовать класс
System.Convert
, если хотите конвертировать между несовместимыми типами. Основное различие между литьем и convert - компиляция и время выполнения . Исключения преобразования типов появляются во время выполнения, то есть при выполнении типа, который не выполняется во время выполнения, будет выведеноInvalidCastException
. Вывод: при кастинге вы сообщаете компилятору, чтоa
действительно является типомb
, и если это так, то проект строится без каких-либо ошибок, таких как этот пример:double s = 2; int a = (int) s;
Но в преобразовании вы говорите для компилятора существует способ создать новый объект из
a
типаb
, пожалуйста, сделайте это и постройте проект без каких-либо ошибок, но, как я уже сказал, , если листинг типа не работает во время выполнения, это вызоветInvalidCastException
, который должен быть брошен .Например, код ниже никогда не компилируется, потому что компилятор обнаруживает, что не может выразить выражение типа
DateTime
для вводаint
:DateTime s = DateTime.Now; int a = (int)(s);
Но этот файл скомпилирован успешно:
DateTime s = DateTime.Now; int a = Convert.ToInt32(s);
Но во время выполнения вы получите
InvalidCastException
, в котором говорится:Недопустимый литой от 'DateTime' до 'Int32'.