为什么虚拟表指针不包含在我的反编译代码中?

时间:2017-12-13 13:05:32

标签: c# .net roslyn decompiling

我正在阅读维基百科上的虚拟方法表,我偶然发现了

  

每当一个类定义一个虚函数(或方法)时,大多数编译器都会向该类添加一个隐藏的成员变量,该变量指向一个指向(虚拟)函数的指针数组,称为虚拟方法表(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()}");
        }
    }
}

我想我在这里误解了一些事情,你能帮我解决一下这个问题吗?

0 个答案:

没有答案