日期:2014-05-18 浏览次数:21033 次
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楼写的很详细了
------解决方案--------------------
这段代码主要让你理解什么是虚方法