При вызове метода объекта для целочисленного литерала (такого как ToString), CLR сначала упаковывает литерал?

Интересно, происходит ли бокс для вызова ToString() для целочисленного литерала (5):

5.ToString();

О, и если нет, что происходит для того, чтобы CLR могла вызывать метод ToString()?

1 ответ

Решение

Нет, это не требует бокса - потому что int Переопределение ToString, Компилятор может точно определить, какой метод будет вызван, поэтому ему не нужно проходить виртуальную диспетчеризацию. Он даже не использует callvirt - этот вызов будет соответствовать IL

call instance string [mscorlib]System.Int32::ToString()

Если вы не переопределите ToString() (и т. д.) в структуре, тогда вызовы виртуального метода потребуют упаковки.

Другие вопросы по тегам