Tag: type safety

为什么C#编译器为GetType()方法调用发出callvirt指令?

我很想知道为什么会这样。 请阅读下面的代码示例以及每个部分下面的注释中发出的相应IL: using System; class Program { static void Main() { Object o = new Object(); o.GetType(); // L_0001: newobj instance void [mscorlib]System.Object::.ctor() // L_0006: stloc.0 // L_0007: ldloc.0 // L_0008: callvirt instance class [mscorlib]System.Type [mscorlib]System.Object::GetType() new Object().GetType(); // L_000e: newobj instance void [mscorlib]System.Object::.ctor() // L_0013: call instance class [mscorlib]System.Type [mscorlib]System.Object::GetType() } } 为什么编译器为第一部分发出callvirt而第二部分call ? […]