我想知道当你举一个C#时你做object了什么int.
object o = 10;
int i = (int) o;
Run Code Online (Sandbox Code Playgroud)
非常感激 :)!
Mar*_*ell 13
在一般情况下,这是一个棘手的问题; 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,特别是它必须在运行时确保您正在转换的类型是兼容的,查找代码中定义的特定转换运算符,处理溢出等。铸造是一个相当昂贵的过程。
| 归档时间: |
|
| 查看次数: |
2615 次 |
| 最近记录: |