Otra pregunta reciente de la entrevista de C# que tuve fue si sabía lo que es Boxeo y Unboxing. Le expliqué que los tipos de valores están en pila y los tipos de referencia en Heap. Cuando un valor se convierte en un tipo de referencia, lo llamamos boxeo y viceversa.Boxeo vs Unboxing
Entonces me preguntó para calcular esto:
int i = 20;
object j = i;
j = 50;
¿Cuál es i
?
metí la pata y dijo 50, donde su realidad 20. Ahora creo entenderlo por qué, sin embargo, cuando estaba jugando con diferentes combinaciones Me sorprendió ver esto:
Object a = 1; // Boxing
Object b = a; // referencing the pointer on stack to both objects on heap
a = 2; // Boxing
que estaba esperando a ver b == 2
también, pero no lo es, ¿por qué? ¿Es porque el segundo boxeo destruye y reemplaza todo el objeto a
en el montón?
Porque si hago esto, está bien:
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;
¿Cuál es t2.x
? Debería ser 3, y lo es. Pero este no es un ejemplo de boxeo/unboxing en absoluto, ¿es correcto? Entonces, ¿cómo resumirías esto?
¿Podrían los valores llegar a ser iguales en una conversión de boxeo/unboxing como la anterior?
también ver http://stackoverflow.com/questions/13055/what-is-boxing-and-unboxing-and-what-are-the -trade-offs para una lectura general – nawfal