在 Jesse Liberty 的 Learning C# 一书中,他说“一种类型的对象可以转换为另一种类型的对象。这称为强制转换。”
如果您调查从下面的代码生成的 IL,您可以清楚地看到转换后的赋值与转换后的赋值不同。在前者中,您可以看到正在发生的装箱/拆箱;在后者中,您可以看到对转换方法的调用。
我知道最终这可能只是一个愚蠢的语义差异——但只是转换的另一个词。我并不是要刻薄,但我对任何人对此的直觉不感兴趣——意见在这里不重要!谁能指出一个明确的参考来确认或否认铸造和转换是否是同一件事?
object x;
int y;
x = 4;
y = ( int )x;
y = Convert.ToInt32( x );
谢谢
rp
在马特关于显式/隐式的评论之后添加的注释:
我不认为隐式/显式是区别。在我发布的代码中,两种情况下的更改都是明确的。将 short 分配给 int 时会发生隐式转换。
给 Sklivvz 的注意事项:
我想确认我对 Jesse Liberty(通常是清晰明了的)语言松散的怀疑是正确的。我认为 Jesse Liberty 对他的语言有点松懈。我知道转换是在对象层次结构中路由的——即,您不能从整数转换为字符串,但可以从派生自 System.Exception 的自定义异常转换为 System.Exception。
不过,有趣的是,当您尝试从 int 转换为字符串时,编译器会告诉您它无法“转换”该值。也许杰西比我想象的更正确!