日期:2014-05-20  浏览次数:20672 次

俺是菜神,不懂这段代码
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);                    
                }  
}  
以上代码依次输出:2,5,1,6
为什么?大虾们要说的详细点,谢!


------解决方案--------------------
public void Fun2(A a)
{
a.Fun1(1);
Fun1(5);
}
相当于
public void Fun2(X x)
{
x.Fun1(1);
this.Fun1(5);
}

a.Fun2(b);
就等于
b.fun1(1);
a.fun1(5);

b.Fun2(a);
就等于
a.fun1(1);
b.fun1(5);

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
------解决方案--------------------
注意形参和实参的区别就行了