So Sachen wie eben "12.ToString()" ließen sich ja umschiffen, ohne da wirklich etwas zu instanziren. Wenn man mal davon absieht, dass die Methode ja eh wie schon erwähnt etwas anders implementiert ist.
Danke dir für die Details!
12.ToString() braucht keine Box.
ValueTypes sind per definition sealed. Das heißt, wenn du sowas in deinem Code stehen hast, kein .callvirt nötig sein.
Allerdings würde der JIT in keinem Fall tatsächlich einen klassischen Method lookup machen, der bei virtuellen calls eigentlich nötig wäre, da er weiß, dass 12 sealed ist. Und wennet nich virtuell zugeht, braucht man für den call selbst keine Box.