C#的重写问题?
class A
{
public virtual void fun1(int i)
{
Response.Write(i);
}
public void fun2(A a)
{
a.fun1(1);
fun1(5)
}
}
class B:A
{
public override void fun1(int i)
{
base.fun1(i+1);
}
public void main()
{
A a = new A();
B b = new B();
a.fun2(b);
b.fun2(a);
}
}
以上这个程序会输出什么呢?
------解决方案--------------------2
5
1
6
其实只要明白这整个过程的顺序就行了
a.fun2(b);
---------
首先调用A类中的fun2方法,但是发现执行的是参数a中的方法,也就是B类中的fun1()方法,紧接着执行fun1(5),也就是this.fun1(5)。
b.fun2(a);
=========
这句话的分析顺序如上