using System;
namespace Version2
{
class A
{
public virtual void F1()
{
Console.WriteLine("A.F1");
}
public virtual void F2()
{
Console.WriteLine("A.F2");
}
public virtual void F3()
{
Console.WriteLine("A.F3");
}

class B:A
{
public virtual void F1()
{
Console.WriteLine("B.F1");
}
public new void F2()
{
Console.WriteLine("B.F2");
}
public override void F3()
{
Console.WriteLine("B.F3");
}

class VersionControl
{
public static void Main() 
{
A a=new A();
B b=new B();
A c=b;
a.F1();
a.F2();
a.F3();
b.F1();
b.F2();
b.F3();
c.F1();
c.F2();
c.F3();
Console.Read();
}
}

输出结果:
A.F1
A.F2
A.F3
B.F1
B.F2
B.F3
A.F1
A.F2
B.F3额,我对输出结果特别是C.F1()以后调用的结果不是很明白,哪位帮帮忙,谢谢

解决方案 »

  1.   

    虚函数本身是不会产生多态的,只有被重载后(override)后才会体现.
    转成基类后,只有重载的方法才会调用原始类型的定义,其它都是使用基类定义.
      

  2.   

    A c=b;
    c是B的实例,但是只能表现A的行为B没有继承F1,因此自有执行A的F1
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/