最近一直对.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");
}
}
版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明!