20

如果我有:

void Foo(dynamic X) {
}

接着:

Foo(12);

12会被装箱吗?想不到,想请教高手。

4

3 回答 3

14

是的,它会的。

在底层,一个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 
}
于 2011-02-10T14:53:01.843 回答
1

是的。值类型需要装箱才能进行类型检查。

于 2011-02-10T14:53:03.387 回答
0

是的 !

由于它是一个值类型,它将被装箱。

于 2011-02-10T14:55:11.987 回答