我正在阅读维基百科上的虚拟方法表,我偶然发现了
每当一个类定义一个虚函数(或方法)时,大多数编译器都会向该类添加一个隐藏的成员变量,该变量指向一个指向(虚拟)函数的指针数组,称为虚拟方法表(VMT或Vtable)。
然而,当我反编译我的测试代码时,我在IL中找不到任何成员变量。
我正在使用最新版本的Roslyn进行编译(2.6.0)。
这是我的测试代码:
namespace ConsoleApp1
{
using System;
internal class Program
{
private static void Main(string[] args)
{
var a = new Base();
var b = new Derived();
a.Say();
b.Say();
}
}
public class Base
{
public virtual void Say()
{
Console.WriteLine($"{this.GetType()}");
}
}
public class Derived : Base
{
public override void Say()
{
Console.WriteLine($"{this.GetType()}");
}
}
}
我想我在这里误解了一些事情,你能帮我解决一下这个问题吗?