Wert Typ Übergabe als Referenz bewirkt, dass seine Position auf dem Stack übergeben zu lassen, anstatt den Wert selbst. Es hat nichts mit Boxen und unboxing zu tun. Dies macht es ziemlich einfach, darüber nachzudenken, wie der Stapel während der rekursiven Aufrufe aussieht, da sich jeder einzelne Aufruf auf die "gleiche" Position auf dem Stapel bezieht.
Ich denke, eine Menge Verwirrung aus MSDN's paragraph on boxing and unboxing kommt:
Boxing Namen für den Prozess gegeben ist, wodurch ein Werttyp in einen Referenztyp umgewandelt wird. Wenn Sie eine Variable boxieren, erstellen Sie eine Referenzvariable, die auf eine neue Kopie im Heap verweist. Die Bezugsgröße ist ein Objekt, ...
Möglicherweise Sie zwischen zwei verschiedenen Dingen verwirrend: 1) der „Umwandlung“, wie man will, einen Werttyp ein Objekt zu sagen, die durch ist Definition ein Referenztyp:
int a = 5;
object b = a; // boxed into a reference type
und 2) mit dem Passieren eines Werttyp Parameter durch Referenz:
main(){
int a = 5;
doWork(ref a);
}
void doWork(ref int a)
{
a++;
}
Was sind zwei verschiedene Dinge.
Möglicherweise mein Mangel an Wissen, aber lassen Sie uns gehen: Übergabe eines Werttyps durch Ref bewirkt, dass seine Position auf dem Stapel übergeben wird und nicht der Wert selbst. Es hat nichts mit Boxen und Unboxing zu tun, richtig? – Adimeus
Von MSDN: "Es gibt kein Boxen eines Werttyps, wenn es als Verweis übergeben wird." –