При вызове метода объекта для целочисленного литерала (такого как ToString), CLR сначала упаковывает литерал?
Интересно, происходит ли бокс для вызова ToString() для целочисленного литерала (5):
5.ToString();
О, и если нет, что происходит для того, чтобы CLR могла вызывать метод ToString()?
1 ответ
Решение
Нет, это не требует бокса - потому что int
Переопределение ToString
, Компилятор может точно определить, какой метод будет вызван, поэтому ему не нужно проходить виртуальную диспетчеризацию. Он даже не использует callvirt - этот вызов будет соответствовать IL
call instance string [mscorlib]System.Int32::ToString()
Если вы не переопределите ToString()
(и т. д.) в структуре, тогда вызовы виртуального метода потребуют упаковки.