public class MyTest
    {        public class B : A
        {
            public override void Fun1(int i)
            {
                base.Fun1(1);
            }            public static void Main()
            {
                B b = new B();
                A a = new A();
                b.Fun2(b);
                b.Fun2(a);
                Console.ReadLine();
            }
        }
        public class A
        {
            public virtual void Fun1(int i)
            {
                Console.WriteLine(i);
            }
            public void Fun2(A a)
            {
                a.Fun1(1);
                Fun1(5);
            }
        }
    }请帮忙解释下得到结果是 1,5,1,1的原因

解决方案 »

  1.   


    额贴错了如下public class MyTest
        {        public class B : A
            {
                public override void Fun1(int i)
                {
                    base.Fun1(1);
                }            public static void Main()
                {
                    B b = new B();
                    A a = new A();
                    a.Fun2(b);
                    b.Fun2(a);
                    Console.ReadLine();
                }
            }
            public class A
            {
                public virtual void Fun1(int i)
                {
                    Console.WriteLine(i);
                }
                public void Fun2(A a)
                {
                    a.Fun1(1);
                    Fun1(5);
                }
            }
        }解释下为 1,5,1,1的原因
      

  2.   

    A类中的Fun1是virtual方法 B类中又重写了
      

  3.   

    b.Fun2(b);执行B类继承自A类的方法Fun2,第一句是形参的Fun1方法,即Console.WriteLine(i);
    第二句没有限定那么就是调用者(b)的方法base.Fun1(1);同理a.Fun2(a),
    所以结果是:
    1
    1
    1
    1
    光标在此处
      

  4.   

    我看帖的时候还没看到你的更正
    a.Fun2(b)没什么可说的,自己的类的实例调用自己的方法,一步一步来
    b.Fun2(a)是B的实例它的Fun2方法是继承自A的,第一句话有a.这就限定了方法的具体位置
    第二句没有限定,那么默认就是本类里的方法了,所以Fun1(5)相当与b.Fun1(5),那么输出的就是1