分析一个小DEMO
程序: 
 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();    
                                     b.Fun2(a);                               
                         }    
 }      
 这个输出结果是1   和6 
 我不明白为什么,以我看该是输出2和6,请详细解说下 
------解决方案--------------------B b = new B();  创建实例。 
             A a = new A();  创建实例。 
             b.Fun2(a);  调用b的Fun2 ,b自己没Fun2,进入基类a的Fun2   
  public void Fun2(A a)    
        {  
             a.Fun1(1);   //实例a的Fun1(1)当然输出个 1。 
             Fun1(5);     //这里由于是b的实例调用进来的,所以进入b的overide的Fun1 ,然后base.Fun1 (i + 1),调用基类的Fun1;  输出6 ,完毕。 
         }  
------解决方案--------------------毫无悬念的代码,   
 A 是 A,   
 B 是 B,   
 多看几遍代码,
------解决方案--------------------为什么a.Fun1(1)不是调用B.Fun1(1)呢?   
 里面已经表明a.了,可能调用b的吗/  
 overide不是把所有的调用都overide了,否则之前的不白写了,如果有多重overide,难道我们只能调用最后一个overide的方法吗?   
 多态性是根据对象来的,方法是对象的方法. 多看看书了解基本概念吧.