【发布时间】:2010-11-12 11:54:10
【问题描述】:
我想知道当您将 object 转换为 int 时,C# 会做什么。
object o = 10;
int i = (int) o;
非常感谢:)!
【问题讨论】:
我想知道当您将 object 转换为 int 时,C# 会做什么。
object o = 10;
int i = (int) o;
非常感谢:)!
【问题讨论】:
在一般情况下,这是一个棘手的问题;p 这取决于确切的场景:
object,这是一个unbox操作,它颠倒了值类型可以被存储在对象引用中 (Unbox / Unbox_Any)Nullable<int>,则评估.Value 属性(如果值为空,则会导致异常)uint、float 等),则发出特定的操作码(可能根本没有)以执行转换直接在 IL (Conv_I4)Call)CastClass)我认为那是相当完整的?
【讨论】:
这是一个装箱和拆箱的例子:
http://msdn.microsoft.com/en-us/library/yz2be5wk(VS.80).aspx
C# 正在获取 int 的值类型(也许它是一个局部变量,在寄存器中或堆栈上),将它装箱到一个对象中,然后将它放在堆上。当你转换回 int 时,这个过程是相反的。
更一般地说,编译器在强制转换时会创建非常复杂且特定于类型的 IL,特别是它必须确保在运行时您正在强制转换的类型是兼容的,查找代码中定义的特定强制转换运算符,处理溢出等等等等。铸造是一个相当昂贵的过程。
【讨论】:
object o = myClass
在这种特殊情况下,它称为“拆箱”,请查看http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx
【讨论】:
在这里查看有关以下信息的信息:Casting
另外,值得一读:Boxing and Unboxing
【讨论】: