2016-09-18 13 views
0

Richter "CLR via C#"有名な本アンボックス。多くの場合、スタックするフィールドのコピー

私は、アンボックスすると、ヒープ上のボックス化されていない値へのポインタを返しますが、C#ではポインタを取得できないことを理解しています。ヒープからスタックへのフィールドのコピーが完了しました(hereと回答)。私は、オブジェクトのアンボクシングやる私はそう

Console.WriteLine(v + ", " + (Int32)o); 

行う

しかしは、 "o" は、ポインタだけコピーせずに、渡されました。 は「...これはアンボクシング操作(ただし、コピー操作)が必要です...」 (リヒター、129ページ)

さて、私の質問は次の場合、ヒープ上の箱なしの値に戻りポインタとするとき、それはまたコピースタックに?

おかげ

P.S:コード:

 Int32 v = 5; 
     Object o = v; 
     Console.WriteLine(v + ", " + (Int32)o); 
+0

コードは、Richterの本(そのまま1行)からそのままコピーされ、通常どおりコンパイルされます。 – Philippe

答えて

1

unbox自体が値をコピーしません。それでも値は使用されるとコピーされます。リヒターの本の例では、すぐ後に続くboxオペレーションは、値を新しいボックス化された値にコピーします。

+0

こんにちはフィリップ!回答ありがとうございますが、私の質問は: 値をコピーしたときにアンボックスを行っている間に ありがとう – zzfima

+0

@zzfima値はコピーされません** **アンボックス時、ほとんど常にコピーされます**後で**、値。私は 'unbox'に何らかのコピー('& '演算子で'安全でないコードさえ)されていないものをコンパイルするC#コードは知らないが、確かにILで直接行うことができる。私の例では – Philippe

+0

"Console.WriteLine(v +"、 "+(Int32)o)"リヒターは "o"をアンボックスするとコピーされず、ポインタだけが – zzfima

関連する問題