看到这样的代码
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。(但是事实上不是啊,哪错了?) |