¿Llamar a un método en un tipo de valor resulta en un boxeo en .NET?

Estaba participando en la pregunta de desbordamiento de pila¿Todo en .NET es un objeto?.

Y un afiche (en comentarios de respuesta aceptada) parecía pensar que realizar una llamada al método en un tipo de valor resultó en un boxeo. Me señalóBoxeo y desempaquetado (Guía de programación de C #) que no especifica exactamente el caso de uso que estamos describiendo.

No confío en una sola fuente, por lo que solo quería obtener más comentarios sobre la pregunta. Mi intuición es que no hay boxeo, pero mi intuición apesta. :RE

Para elaborar más:

El ejemplo que usé fue:

int x = 5;
string s = x.ToString(); // Boxing??

El boxeo haceno ocurrirá si la estructura en cuestión anula el método heredado del objeto como lo indica la respuesta aceptada aquí.

Sin embargo, si la estructura no anula el método, una "restricción"CIL El comando se ejecuta antes de un callvirt. De acuerdo con la documentación,OpCodes.Constrained Field, esto da como resultado el boxeo:

Si thisType es un tipo de valor y thisType no implementa el método, entonces ptr se desreferencia, se encuadra y se pasa como el puntero 'this' a la instrucción del método callvirt.

Respuestas a la pregunta(4)

Su respuesta a la pregunta