Base obj = new Derived(); 虽然Derived覆盖了Base的方法 事实上这个对象被当做Base对象(声明Base obj决定) 所以调用了Base的方法
obj是Base类型的变量,当你用obj去调用方法的时候。会去Base类的方法列表中找到相应的方法,所以倒数第二个的结果是Base.fill.那为什么draw方法输出的结果是Derived.draw?因为draw是一个虚方法,当在Base方法中发现draw是一个虚方法时,就会去obj真正指向的对象类型的方法列表里面去找到这个方法,并执行,所以结果是Derived.draw.这就是多态的表现。再往细了去,还可以说得更多。不过楼主可以去看看书clr via c#.
这里有详细的注释
虽然Derived覆盖了Base的方法
事实上这个对象被当做Base对象(声明Base obj决定)
所以调用了Base的方法