using System;
class A
{
   public virtual void F() { Console.WriteLine("A.F"); }
}
class B: A
{
   public override void F() { Console.WriteLine("B.F"); }
}
class C: B
{
   new public virtual void F() { Console.WriteLine("C.F"); }
}
class D: C
{
   public override void F() { Console.WriteLine("D.F"); }
}
class Test
{
   static void Main() {
      D d = new D();
      A a = d;
      B b = d;
      C c = d;
      a.F();
      b.F();
      c.F();
      d.F();
   }
}
输出结果是
B.F
B.F
D.F
D.F运行a.F()为什么执行class B中的方法,晕!!

解决方案 »

  1.   

    因为c中把a的f()覆盖了。c#中的原则是执行“最近的重写”方法。所以a,b都执行b的
    c,d都执行d的
      

  2.   

    这个就好比:A是人,B是男人,是人都有个动作:尿尿。不过男人的尿尿的动作被你特别强调成站着尿尿了。这个时候,一个特定的男人--你,你既是男人B,也是个人。不过如果要执行尿尿这个动作的话,无论你是以男人还是人来强调你的身份,都是站着尿尿的来完成这个动作的。------呵呵