internal class SchoolCalendar
{
public void GetSchoolYear()
{
Console.WriteLine("Base GetSchoolYear called from: " + this);
LeapYear();
}
public virtual void LeapYear()
{
Console.WriteLine("Base Leap Year");
}
}
internal class DerrivedSchoolCalendar : SchoolCalendar
{
public override void LeapYear()
{
Console.WriteLine("Derrived Leap Year");
}
}
internal class Program
{
static void Main(string[] args)
{
SchoolCalendar bsy = new DerrivedSchoolCalendar();
bsy.GetSchoolYear();
}
}
在上面的代码中,基类调用基类方法,并且所述方法调用虚方法。我试图更详细地了解vtable是如何工作的。尤其是事物的秩序。我学到的是,在这段代码中,派生类的vtable被调用。我认为首先调用基类的vtable,然后才调用指向第二个vtable的指针。
我想知道更多和更好的关于它的工作顺序在任何vtable。有没有一种方法来调试我只想遵循vtable访问的想法?(注意,我对反射一无所知,例如,请温柔一点)。
1条答案
按热度按时间ndh0cuux1#
用户@HansPassant发表了一条评论,我认为这就是答案。WinDvg的SOS扩展与dumpmt命令相结合将提供数据来解决我自己的问题。