4

C#簡単なプログラム を作成しました:

class Program
{
    static void Main(string[] args)
    {
        Int32? a = null;
        object x = a;
    }
}

MSDNによると:

null 許容型に基づくオブジェクトは、オブジェクトが null でない場合にのみボックス化されます。HasValue が false の場合、オブジェクト参照はboxing ではなくnull に割り当てられます。

実行可能ファイルを試してみたところ、コードにboxメソッドが呼び出されていることがILDASMわかりました。IL

.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       17 (0x11)
  .maxstack  1
  .locals init ([0] valuetype [mscorlib]System.Nullable`1<int32> a,
           [1] object x)
  IL_0000:  nop
  IL_0001:  ldloca.s   a
  IL_0003:  initobj    valuetype [mscorlib]System.Nullable`1<int32>
  IL_0009:  ldloc.0
  IL_000a:  box        valuetype [mscorlib]System.Nullable`1<int32>
  IL_000f:  stloc.1
  IL_0010:  ret
} // end of method Program::Main

私の質問は:なぜそれが呼ばれたのですか?たぶん私は何か間違ったことをしている、または何かを誤解していますか?

4

2 に答える 2