В книге Jesse Liberty Learning С# он говорит: "Объекты одного типа могут быть преобразованы в объекты другого типа. Это называется литье".
Если вы исследуете IL, сгенерированный из приведенного ниже кода, вы можете ясно видеть, что выбранное задание не делает то же самое, что и преобразованное присваивание. В первом вы видите, как происходит бокс/распаковка; в последнем вы можете увидеть вызов метода конвертации.
Я знаю, что в конце концов это может быть просто глупое смысловое различие - но это просто другое слово для преобразования. Я не хочу быть забавным, но меня это не интересует, потому что мнения здесь не считаются! Может ли кто-нибудь указать на окончательную ссылку, которая подтверждает или отрицает, что кастинг и преобразование - одно и то же?
object x;
int y;
x = 4;
y = ( int )x;
y = Convert.ToInt32( x );
Спасибо
гр
Примечание добавлено после комментария Matt о явной/неявной:
Я не думаю, что подразумеваемая/явная разница. В опубликованном мной коде изменения в обоих случаях являются явными. Неявное преобразование - это то, что происходит, когда вы назначаете short для int.
Примечание для Sklivvz:
Я хотел подтвердить, что мое подозрение в ослаблении языка Джесси Свободы (иначе обычно ясное и ясное) было правильным. Я думал, что Джесси Либерти немного расстроен своим языком. Я понимаю, что кастинг маршрутизируется в иерархии объектов - т.е. Вы не можете отличать целое число с строкой, но вы можете использовать произвольное исключение, происходящее из System.Exception, в System.Exception.
Интересно, однако, что, когда вы пытаетесь сделать из int в строку, компилятор сообщает вам, что он не может "преобразовать" значение. Может быть, Джесси более прав, чем я думал!