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