Еще один недавний вопрос интервью с С#, который у меня был, был, если бы я знал, что такое бокс и Unboxing. Я объяснил, что типы значений относятся к типам Stack и Reference в Heap. Когда значение передается в ссылочный тип, мы называем его боксом и наоборот.
Затем он попросил меня рассчитать это:
int i = 20;
object j = i;
j = 50;
Что такое i
?
Я испортил это и сказал 50, где его фактически 20. Теперь я думаю, понимаю, почему, однако, когда я играл с разными комбинациями, я был удивлен, увидев это:
Object a = 1; // Boxing
Object b = a; // referencing the pointer on stack to both objects on heap
a = 2; // Boxing
Я ожидал увидеть b == 2
, но это не так, почему? Это потому, что второй бокс разрушает и заменяет весь объект a
на кучу?
Потому что, если я это сделаю, это прекрасно:
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;
Что такое t2.x
? Это должно быть 3, и это так. Но это совсем не пример бокса/распаковки, это правильно? Итак, как бы вы это обобщили?
Могут ли значения когда-либо стать одинаковыми в преобразовании бокса/распаковки, как указано выше?