看到这样的代码 
public class Base 
    { 
        public virtual void Hello() 
        { 
            Console.Write("Base"); 
        } 
    } 
public class Sub : Base 
    { 
        public override void  Hello() 
        { 
            Console.Write("Sub"); 
        } 
    } 
public class a 
{ 
 
 
    static void Main() 
    { 
        Base b = new Base(); 
        b.Hello(); 
        Sub s = new Sub(); 
        s.Hello(); 
        Base b2 = new Sub(); 
        b2.Hello();         
        Console.Read(); 
 
    } 
} 
 
结果是:Base  Sub Sub. 
 
我想知道最后一个Sub 是怎样出来的。 
先说一下我的理解(理解不正确,请帮我看看哪出错了):第三个调用 构造了一个Sub类的实例,同时也实例化了一个Base类,两者在托管堆中的位置,相当于大圆套小圆,Base是小圆,都有Hello(),但内容不同(重载了),而 b2 是Base类,就会指向那个小圆的地址,从而执行 基类的方法,而输出Base。(但是事实上不是啊,哪错了?) |