昨天从网上看了道asp。net面试题。如下
   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);
            Console.ReadKey();
        }
    }
    我的答案是1,5,2,6
    答案是错的,运行时2,5,1,6
     求详细解答过程。(有中间思路,越详细越好)

解决方案 »

  1.   

    B b = new B(); 
                A a = new A(); 
                a.Fun2(b); 
                b.Fun2(a); 2,5,1,6中的2是由于B类重写了基类的Fun1,于是调用的是B类中的Fun11是因为调用的是A对象的Fun1,并没有调用重写的方法,所以是1
      

  2.   

     
    a.Fun2(b); a.public void Fun2(b) 
     { 
        b.Fun1(1); 
        a.Fun1(5); 
     }
    b.Fun2(a); 
    b.public void Fun2(a) 
     { 
        a.Fun1(1); 
        b.Fun1(5); 
     }
      

  3.   


    a.Fun2(b);
    this = a;
    obj = b;
    this.public void Fun2(obj)
    {
    obj.Fun1(1);
    this.Fun1(5);
    }b.Fun2(a);
    this = b;
    obj = a;
    this.public void Fun2(obj)
    {
    obj.Fun1(1);
    this.Fun1(5);
    }