Подтвердить что ты не робот

С# - динамические параметры в штучной упаковке

Если у меня есть:

void Foo(dynamic X) {
}

И затем:

Foo(12);

Будет ли 12 боксеров? Я не могу представить, что это было бы, я бы просто хотел спросить экспертов.

4b9b3361

Ответ 1

Да, это будет.

Под капотом тип 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 
}

Ответ 2

Да. Для ввода типа проверки необходимо ввести тип значения.

Ответ 3

Да!

Так как это тип значения, он будет помещен в коробку.