A chamada de um método em um tipo de valor resulta em boxe no .NET?

Eu estava participando da pergunta Stack OverflowTudo no .NET é um objeto?.

E um pôster (nos comentários da resposta aceita) parecia pensar que executar uma chamada de método em um tipo de valor resultava em boxe. Ele me apontouBoxe e Unboxing (Guia de Programação em C #) que não especifica exatamente o caso de uso que estamos descrevendo.

Não sou de confiar em uma única fonte, então só queria receber mais comentários sobre a questão. Minha intuição é que não há boxe, mas minha intuição é péssima. : D

Para elaborar ainda mais:

O exemplo que eu usei foi:

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

Boxe faznão ocorrerá se a estrutura em questão substituir o método herdado do objeto, conforme a resposta aceita aqui declarar.

No entanto, se a estrutura não substituir o método, uma "restrição"CIL O comando é executado antes de um callvirt. De acordo com a documentação,Campo OpCodes.Constrained, isso resulta em boxe:

Se thisType é um tipo de valor e thisType não implementa método, então ptr é desreferenciado, encaixotado e passado como o ponteiro 'this' para a instrução do método callvirt.

questionAnswers(4)

yourAnswerToTheQuestion