ポスト「疑いの梱包上のC#」についての個人的な見解(オリジナルリリースCSDN 2017インディアン10越07 Riを10時21分10秒)

序文

何事もなくアイドルの最後の夜は、少し周りの最後のCSDNに、突然、私が見つかりました。ポストがポイントにに見て、非常に興味深いです。

非常に洞察に満ちた質問

= 1 INT、
オブジェクトB = A;
オブジェクトC = B;
C = 2、
なぜB 2になりますか?B、Cは参照ああしてヒープを指している必要がありますか?
また、ここでは、考えて私を得た答え偉大な神が、エラーがある場合書かれて、私たちに知らせてくださいの自分の理解を置きます。

このホワイトペーパーのテストコード:

static void Main()
{
    int a = 1;
    object b = a;
    object c = b;
    c = 2;
}

結果を参照してくださいIldasm.exeをを使用します。

アンコメント

メモを追加:

メモを追加

自分自身のために私はILコードの考えを理解してください。

1、Idc.i4.1、 stloc.0  ==>  int a = 1;

2、Idloc.0、 box[mscorlib]System.Int32、 stloc.1  ==>  object b = a;(b指向在堆栈上新建对象值为1,与a无任何联系)

3、Idloc.1、 stloc.2  ==>  object c = b;

4、Idc.i4.2、 box[mscorlib]System.Int32、 stloc.2  ==>  c = 2;(c指向堆栈上新建对象值为2)

2,4①を参照してください箱入りとアンボクシング(C#プログラミングガイド)パッキン材をここで説明する絵を書きます

②3時のために、私の理解である:スタック上の同じオブジェクトへのB、C地点、12階の行き詰まりを投稿するこの男の答えはまた、これを確認しました。

③試験は、私は、オブジェクトの値Bを変更したとき、cは変更されないことを見出しました。私は、オブジェクトをbに変更され、この時間は、オブジェクトを指し示すB、スタック上の新しいオブジェクトを持っていると思うが、この時間b、異なるC。ここでは、異なるクラスタイプ。ここで説明する絵を書きます

本明細書中に参考:IL詳細な命令の大きなマスターカラム:.NET中間言語(IL)

おすすめ

転載: www.cnblogs.com/njit-77/p/11468929.html