using System;
class a
{
public virtual void fun()
{
Console.WriteLine("a");
}
}
class b:a
{
public virtual void fun()
{
       Console.WriteLine("b");
}
}
class c:b
{
public override void fun()
{
 Console.WriteLine("c");
}
static void Main()
{
 a aa=new c();
 b bb=new c();
aa.fun();
bb.fun();
}
}
结果
a
c结果想不通 

解决方案 »

  1.   

    Class b没有override掉Class a的方法fun,而是同样声明为virtual从而替换了a.fun()
    b   bb=new   c();  
    bb.fun(); 若要输出c,只要把b.fun()同样声明为override即可
      

  2.   

    没有什么想不通的,就是这样的!B隐藏了A的Fun方法,C重写的只是B的Fun方法,如果当作A来访问当然A的Fun方法是未被重写的。
      

  3.   

    补充一点
    主要问题是aa这个对象调用fun的时候为什么是调用的a类的而不是C类的
      

  4.   

    应为c重载的是b的,所以aa.fun仍然使用的是a.fun