日期:2014-05-19  浏览次数:20692 次

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);
=========
这句话的分析顺序如上