关于override和new在孙子类里面调用祖父类方法差异的问题
程序代码:
using System; namespace foreachtest { class program { public static void Main(string[] args) { A a=new A(); B b=new B(); A ab=new B(); C c=new C(); // a.afuc(); // a.avfuc(); // b.afuc(); // b.avfuc(); // ab.afuc(); // ab.avfuc(); // c.afuc(); c.avfuc(); } } class A { public void afuc() { Console.WriteLine("这是A的普通方法"); } public virtual void avfuc() { Console.WriteLine("这是A的虚方法"); } } class B:A { public new void afuc() { Console.WriteLine("这是B的普通方法"); } public override void avfuc() { // base.avfuc(); Console.WriteLine("这是B的虚方法"); } } class C:B { public override void avfuc() { ((A)this).avfuc();//这里的问题 Console.WriteLine("这是C的虚方法"); } public new void afuc() { ((A)this).afuc(); Console.WriteLine("这是c的普通方法"); } } }
这个程序编译通过了,但运行出错Process is terminated due to StackOverflowException.
我知道它有错,但是不是很了解原因
((A)this).avfuc()编译通过,说明了编译器的确将当前对象强制转换成了A类对象,但为什么运行时异常,是因为仍然使用的是c对象?类似多态?那new里面为什么是可以通过的?
望大神解释解释