Я только что участвовал в ответе на вопрос о переполнении стека Все ли в .NET является объектом? < / а>.
И один плакат (в комментариях к принятому ответу), похоже, думал, что выполнение вызова метода для типа значения привело к боксу. Он указал мне на бокс и распаковку (программирование на C # Guide), который не совсем точно описывает описываемый нами вариант использования.
Я не из тех, кто доверяет одному источнику, поэтому я просто хотел получить дополнительные отзывы по этому вопросу. Моя интуиция подсказывает, что бокса нет, но моя интуиция - отстой. : D
Для дальнейшего уточнения:
Я использовал следующий пример:
int x = 5;
string s = x.ToString(); // Boxing??
Упаковка не происходит не, если рассматриваемая структура переопределяет метод, унаследованный от объекта, как указано здесь в принятом ответе.
Однако, если структура не отменяет метод, команда «ограничить» CIL выполняется до к callvirt. Согласно документации, коды операций. Ограниченное поле, это приводит к боксу:
Если thisType является типом значения, а thisType не реализует метод, тогда ptr разыменовывается, упаковывается и передается как указатель this на инструкцию метода callvirt.