これは、値の種類]ボックスの質問についてです。(Int32)を どのように内部値型の回避ボックス
私はILコードをチェックし
が、私はILはInt32.ToString()を呼び出した、とInt32.ToStringの下で、それらのネストされたメソッド()はボックスのアクションはありません、
私たちが知っているように値の型が参照型に変換する場合は、ボックスがあり、
とC#は、私たちに別の方法を与えることはありません。プロセスt彼の変容。
値の型は参照クラス(文字列)にどのように変換されますか?
Console.WriteLine( "123456 {0}"、3.ToString())を呼び出した場合。値タイプ3は、参照タイプ文字列でどのように結合しますか。何もボックスが必要ないと言っていますが、スタックフレーム上の3がヒープ上の文字列にどのように移動するのですか? –
@LuffyDingは値のタイプ3をヒープに移動しません。 'ToString()'メソッドは 'string * 'となる*完全に無関係な新しいオブジェクトを作成し、長さ1と値50のユニコードコードポイントを含むようになります(これは、 3'')とおそらくゼロターミネータですが、これはスタック上の元の値とはほとんど関係がありません。具体的には –
の "itoa"スタイルの演算を実行した値です。 'ldstr'、' ldc.i4.3'、 'call'(int.ToString())、' call'(string.Format(string、string))、 'call'(Console。WriteLine(文字列))(与えてください、実際には 'int.ToString'呼び出しを行うために' stloc'/'ldloca'ペアを使用しなければなりません) –