C # - Есть динамические параметры в штучной упаковке - PullRequest
20 голосов
/ 10 февраля 2011

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

void Foo(dynamic X) {
}

А потом:

Foo(12);

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

Ответы [ 3 ]

14 голосов
/ 10 февраля 2011

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

Под капотом тип dynamic - это просто object с некоторыми метаданными, поэтому типы значений будут помещены в квадрат, когда они помещены в переменную field,или параметр типа 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 
}
1 голос
/ 10 февраля 2011

Да. Тип значения должен быть помещен в коробку для проверки типа.

0 голосов
/ 10 февраля 2011

Да!

Поскольку это тип значения, он будет упакован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...