如果我有:
void Foo(dynamic X) {
}
接着:
Foo(12);
12会被装箱吗?想不到,想请教高手。
是的,它会的。
在底层,一个dynamic
类型只是一个object
带有一些元数据的类型,所以当放入一个类型的变量、字段或参数时,值类型会被装箱dynamic
。
该方法实际上将被编译为:
void Foo([Dynamic] object X)
{
}
在此处阅读有关DynamicAttribute的更多信息。
IL 用于调用它的代码:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.maxstack 8
L_0000: nop
L_0001: ldc.i4.s 12
L_0003: box int32
L_0008: call void ConsoleApplication13.Program::Foo(object)
L_000d: nop
L_000e: ret
}
是的。值类型需要装箱才能进行类型检查。
是的 !
由于它是一个值类型,它将被装箱。