Ich war gerade an Stack Overflow beteiligt Frage Is everything in .NET an object?.Ruft das Aufrufen einer Methode für einen Werttyp das Boxen in .NET auf?
Und ein Poster (in Kommentaren der akzeptierten Antwort) schien zu denken, dass das Ausführen eines Methodenaufrufs auf einem Werttyp zu Boxen führte. Er wies mich auf Boxing and Unboxing (C# Programming Guide), die nicht genau spezifiziert den Anwendungsfall, den wir beschreiben.
Ich bin nicht einer einzigen Quelle zu vertrauen, also wollte ich nur weiteres Feedback zu der Frage bekommen. Meine Intuition ist, dass es kein Boxen gibt, aber meine Intuition ist scheiße. : D
Zur weiteren erarbeiten:
Das Beispiel I verwendet wurde:
int x = 5;
string s = x.ToString(); // Boxing??
Boxen tut nicht, wenn die Struktur in Frage kommen die Methode aus dem Objekt als akzeptierte Antwort geerbt hat Vorrang vor hier Zustände.
Wenn jedoch die Struktur die Methode nicht überschreibt, wird vor einer Callvirt ein "constrain" CIL Befehl ausgeführt. Gemäß der Dokumentation, OpCodes.Constrained Field führt dies im Boxen:
Wenn thisType ein Werttyp ist und thisType nicht implementiert Methode dann ptr dereferenziert, geboxt, und als ‚diese weitergegeben 'Zeiger auf die callvirt-Methodenanweisung .
Und der Grund hier: http://stackoverflow.com/questions/1359856/why-does-implicitly-calling-tostring-on-a-value-type-cause-a-box-instruction – nawfal