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"); }