Почему компилятор C# выдает инструкцию callvirt для вызова метода GetType()?C#

Место общения программистов C#
Anonymous
Почему компилятор C# выдает инструкцию callvirt для вызова метода GetType()?

Сообщение Anonymous »

Мне интересно узнать, почему это происходит. Пожалуйста, прочтите приведенный ниже пример кода и соответствующий 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()
}
}
Почему компилятор выдал вызов Virt для первого раздела, а вызов для второго раздела? Есть ли какая-либо причина, по которой компилятор когда-либо выдает инструкцию callvirt для невиртуального метода? И если есть случаи, когда компилятор выдает вызовvirt для невиртуального метода, создает ли это проблемы с безопасностью типов?

Подробнее здесь: https://stackoverflow.com/questions/845 ... ttype-meth

Вернуться в «C#»