面试题 C# 虚方法与重写
如题: 
 using   System; 
 class   A 
 { 
    public   void   F(){Console.WriteLine( "A.F ");} 
    public   virtual   G(){Console.WriteLine( "A.G ");}    
 } 
 class   B:A 
 { 
    public   void   F(){Console.WriteLine( "B.F ");} 
    public   override   G(){Console.WriteLine( "B.G ");} 
 } 
 void   main() 
 { 
    B   b=new   B(); 
    A   a=b; 
    a.F(); 
    a.G(); 
    b.F(); 
    b.G(); 
 } 
 让写出程序将输出什么? 
 我先写的是:A.F-A.G-B.F-B.G   后又改成了:B.F-B.G-B.F-B.G 
 我是不是改错了? 
 诸位帮看下 
------解决方案--------------------using System; 
  class A 
     { 
         public void F() { Console.WriteLine( "A.F "); } 
         public virtual void G() { Console.WriteLine( "A.G "); } 
     } 
     class B : A 
     { 
         public void F() { Console.WriteLine( "B.F "); } 
         public override void G() { Console.WriteLine( "B.G "); } 
     } 
     class text 
     { 
         public static void Main() 
         { 
             B b = new B(); 
             A a = b; 
             a.F(); 
             a.G(); 
             b.F(); 
             b.G(); 
             Console.ReadLine();   
         } 
     }     
 这样的结果才是: 
 A.F 
 B.G 
 B.F 
 B.G 
------解决方案--------------------1. 你的Main函数写的就不对 
 2. 如果父类的方法是virtual或者abstract,子类为override,则是重写 
 否则默认的情况下是new