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