Welcome

首页 / 软件开发 / .NET编程技术 / CLR怎样实现虚方法的多态调用(1)

CLR怎样实现虚方法的多态调用(1)2011-08-04 博客园 紫色阴影最近一直对.net framework中,虚方法的调用是如何实现这个问题有些疑惑,在看了Essential .Net 关于Method的那一章和Artech推荐的文章Drill Into .NET Framework Internals to See How the CLR Creates Runtime Objects以后,还是一知半解,有些疑惑得不到答案。主要有这些:

父类定义的非虚方法是否在子类中有拷贝?

虚方法是如何实现多态的?

子类继承父类的虚方法实现是否和继承非虚方法机制相同?

如果子类隐藏了父类的虚方法,这又是怎样实现的?

当然问题不止这么多,关于接口方面还有很多很多疑惑,不过时间有限,一下也没办法全部弄清楚, 有时间慢慢研究。我主要使用Windbg工具来跟踪调试,关于这个工具如何使用,Google一下就会有很多了 。

这些都是我自己研究加上参考资料所得,如果有不对的地方,希望大家讨论指出。

首先看下面这段代码:

public class Base
{
public virtual void VirtualFun1()
{
Console.WriteLine("Base.VirtualFun1");
}
public void NoneVirtualFun1()
{
System.Console.WriteLine("Base.NoneVirtualFun1");
}
public virtual void VirtualFun2()
{
System.Console.WriteLine("Base.VirtualFun2");
}
public virtual void VirtualFun3()
{
System.Console.WriteLine("Base.VirtualFun3");
}
}

public class Derived : Base
{
public override void VirtualFun1()
{
Console.WriteLine("Derived.VirtualFun1");
}
public new virtual void VirtualFun2()
{
System.Console.WriteLine("Derived.VirtualFun2");
}
public virtual void VirtualFun4()
{
System.Console.WriteLine("Derived.VirtualFun4");
}

}