私が最近受けたもう1つのC#インタビューの質問は、ボクシングとアンボクシングが何であるかを知っているかどうかでした。値型はスタックにあり、参照型はヒープにあることを説明しました。値が参照型にキャストされる場合、それをボクシングと呼び、その逆も同様です。
それから彼は私にこれを計算するように頼んだ:
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
2番目のボクシングがヒープ上のオブジェクト全体を破壊して置き換えるためですか?
私がこれを行う場合、それは問題ないからです:
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でなければなりません。しかし、これはボクシング/アンボクシングの例ではありません、これは正しいですか?では、これをどのように要約しますか?
ボクシング/アンボクシングの変換で上記と同じ値になる可能性はありますか?