public class A  
{
        public virtual void Fun1(int i) 
       {
            Console.WriteLine(i);
        }
        public void Fun2(A a)   
       {
            a.Fun1(1);
            Fun1(5);
        }
}public class B : A  
{
        public override void Fun1(int i)    
       {
            base.Fun1 (i + 1);
        }
        public static void Main()   
       {
            B b = new B();
            A a = new A();
            a.Fun2(b);
            b.Fun2(a);          
        }
}
输出的结果为:  2    5     1    6其它的都能理解,但第一个输出为什么是2不是1呢?
请哪位高手详解下!!!

解决方案 »

  1.   

    a.Fun2(b);
    那么就是调用CLASS A 里面的FUN2();
    参数是b,那么方法内部的FUN1就应该调用b.FUN1(1);
    而b.FUN1()是重写了A.FUN1()的 public override void Fun1(int i)    
                                 { 
                                     base.Fun1 (i + 1); 
                                  } 
    如果传入的参数是i,应该调用a.FUN1(i+1)才对,所以应该是 Console.WriteLine(i+1)
      

  2.   

         public static void Main()   
           { 
                B b = new B(); 
                A a = new A(); 
                a.Fun2(b); 
               
            } 
    这个地方转了一圈,还是调用的是b.fun1是你自己把自己搞晕了吧。