Я просто участвовал в вопросе Является ли все в .NET объектом?.
И один плакат (в комментариях к принятому ответу), казалось, думал, что выполнение вызова метода по типу значения приводит к боксу. Он указал мне на "Бокс и Unboxing" (Руководство по программированию на С#), в котором точно не указан пример использования, который мы описываем.
Я не доверяю ни одному источнику, поэтому я просто хотел получить дополнительную информацию по этому вопросу. Моя интуиция заключается в том, что нет бокса, но моя интуиция действительно сосать.: D
Дальнейшая разработка:
В качестве примера я использовал:
int x = 5;
string s = x.ToString(); // Boxing??
Бокс не возникает, если рассматриваемая структура переопределяет метод, унаследованный от объекта, как утверждает принятый ответ.
Однако, если структура не переопределяет метод, перед вызовом callvirt выполняется команда "constrain" CIL. Согласно документации, OpCodes.Constrained Field, , это приведет к боксу:
Если этот тип является типом значения и thisType не реализует метод то ptr разыменовывается, помещается в коробку и передается как указатель 'this' на callvirt.