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); } } class Program { public static void Main() { B b = new B(); A a = new A(); a.Fun2(b); b.Fun2(a); Console.ReadKey(); } }
输出结果是
A a = new A(); B b = new B();
a.Fun2(b);
2 b.Fun1(1);
5 a.Fun1(5);
b.Fun2(a);
1 a.Fun1(1);
6 b.Fun1(5)
需要留意的是类A中的Fun2方法,在里面调用Fun1的时候,相当于是this.Fun1
ps:如果把B中的override改为new的话,输出的结果:
1
5
1
5