Eine andere aktuelle C# Interview Frage, die ich hatte, war, wenn ich wusste, was Boxing und Unboxing ist. Ich habe erklärt, dass Werttypen auf Stack und Referenztypen auf Heap sind. Wenn ein Wert in einen Referenztyp umgewandelt wird, nennen wir das Boxen und umgekehrt.Boxen vs Unboxing
Dann fragte er mich, dies zu berechnen:
int i = 20;
object j = i;
j = 50;
Was i
ist?
ich messed es auf und sagte: 50, wo sein tatsächlich 20. Nun denke ich, es zu verstehen, warum, aber wenn ich mit verschiedenen Kombinationen spiele ich war überrascht, das zu sehen:
Object a = 1; // Boxing
Object b = a; // referencing the pointer on stack to both objects on heap
a = 2; // Boxing
Ich hatte erwartet, zu siehe auch b == 2
, aber es ist nicht, warum? Liegt es daran, dass das zweite Boxing das gesamte a
Objekt auf dem Heap zerstört und ersetzt?
Denn wenn ich das tue, es ist in Ordnung:
public class TT
{
public int x;
}
TT t = new TT();
t.x = 1;
TT t2 = new TT();
t2.x = 2;
t = t2;
t.x = 3;
Was t2.x
ist? Es sollte 3 sein, und es ist. Aber das ist kein Beispiel für Boxen/Unboxing überhaupt, ist das korrekt? Wie würdest du das zusammenfassen?
Konnten die Werte in einer Boxing/Unboxing-Konvertierung wie oben immer gleich sein?
Siehe auch http://stackoverflow.com/questions/13055/what-is-boxing-and-unboxing-and-what-are-the -trade-offs für eine allgemeine Lesung – nawfal