Je participais juste à la question Stack Overflow Is everything in .NET an object?.L'appel d'une méthode sur un type de valeur entraîne-t-il une boxe dans .NET?
Et une affiche (dans les commentaires de la réponse acceptée) a semblé penser que l'exécution d'un appel de méthode sur un type de valeur entraînait la boxe. Il m'a indiqué Boxing and Unboxing (C# Programming Guide) qui ne spécifie pas exactement le cas d'utilisation que nous décrivons. Je ne suis pas du genre à faire confiance à une seule source, alors je voulais juste obtenir plus de commentaires sur la question. Mon intuition est qu'il n'y a pas de boxe mais mon intuition est nulle. : D
Pour élaborer davantage:
L'exemple que j'utilisé était:
int x = 5;
string s = x.ToString(); // Boxing??
boxe ne pas se produire si le struct en question remplace la méthode héritée de l'objet comme la réponse acceptée ici États.
Toutefois, si la structure ne remplace pas la méthode, une commande "contrain" CIL est exécutée avant un callvirt. Selon la documentation, OpCodes.Constrained Field, cela se traduit dans la boxe:
Si thisType est un type de valeur et thisType ne met pas en œuvre la méthode alors ptr est déréférencé, emballé et passé comme « cette 'pointeur vers l'instruction de méthode callvirt .
Et voici la raison: http://stackoverflow.com/questions/1359856/why-does-implicitly-calling-tostring-on-a-value-type-cause-a-box-instruction – nawfal