、ボクシングは(ジェネリック<タイプ>の.printで)発生します。奇妙な一般的な動作は、次のコードで
using System;
namespace Test
{
static class Program
{
static void Main()
{
Generic<string> generic = new Generic<string>("test");
generic.Print();
}
}
class Generic<Type>
{
Type value;
public Generic(Type value)
{
this.value = value;
}
public void Print()
{
Console.WriteLine(value);
}
}
}
ILSpy出力:
.method public hidebysig
instance void Print() cil managed
{
// Method begins at RVA 0x207d
// Code size 17 (0x11)
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldfld !0 class Test.Generic`1<!Type>::'value'
IL_0006: box !Type
IL_000b: call void [mscorlib]System.Console::WriteLine(object)
IL_0010: ret
} // end of method Generic`1::Print
それはボクシングと呼び出しだConsole.WriteLineを(オブジェクト) 。私は単純にConsole.WriteLine(string)を呼び出すと仮定しました。ここで何が起こっているのですか?
コードの再利用のように見えます。 –
Fyiの場合、ジェネリックパラメータ 'Type'は' System.Type'と競合する可能性があるので、それは悪い習慣です。 –