日期:2014-05-18 浏览次数:20922 次
class A { public void F() { Console.WriteLine("A.F"); } public virtual void G() { Console.WriteLine("A.G"); } } class B : A { new public void F() { Console.WriteLine("B.F"); } public override void G() { Console.WriteLine("B.G"); } } class virtualMethod { internal static void main() { B b = new B(); A a = b;//什么意思?对象a就是对象b了吗? a.F();//为什么要输出A.F,它不是相当于b.F()吗 b.F(); a.G();//a到底是A的对象还是B的对象? b.G(); } }
class virtualMethod { internal static void main() { B b = new B(); //这儿仅仅是将b的引用复制给a,a和b这时候指向内存中同一个地址。 A a = b;//什么意思?对象a就是对象b了吗? //b中的F()使用了new关键字,相当于b有二个F()方法。 a.F();//为什么要输出A.F,它不是相当于b.F()吗 b.F(); //a在内存中的方法表是A的不是b的。 a.G();//a到底是A的对象还是B的对象? b.G(); } }
------解决方案--------------------
a和b指向同一个对象,a可用,b亦可用
------解决方案--------------------
1楼写的很详细了
------解决方案--------------------
这段代码主要让你理解什么是虚方法