代码如下: 
using System; 
class A //定义类A 

public void F() //方法F 

Console.WriteLine("A.F"); 

public virtual void G() //虚方法G 

Console.WriteLine("A.G"); 


class B:A //定义类B,继承A 

new public void F() //覆盖类A方法F 

Console.WriteLine("B.F"); 

public override void G() //重载类A虚方法G 

Console.WriteLine("B.G"); 


class Test 

static void Main(){ 
B b=new B(); //实例化类B 
A a=b; 
a.F(); //运行结果A.F,问题在这里 
b.F(); //运行结果B.F 
a.G(); //运行结果B.G 
b.G(); //运行结果B.G 
Console.ReadLine(); 

} 不很明白,是引用吗?此时的a代表的是b吗?那为什么a.F(); 运行结果又是A.F呢??高手回答一下?
谢谢啦,刚接触C#,实在想不明白,呵呵!

解决方案 »

  1.   

    多态我还理解了一点,我不明白的是A a=b;的作用是什么啊?
      

  2.   

    你试下把new public void F() //覆盖类A方法F改为重载
      

  3.   

    个人理解B b = new B();
      此时b中存在 a.F()  被隐藏,通过对象b访问不到,可以通过base.F()访问
                  b.F()  new 定义隐藏了基类中a.F() 但没有删除,只是隐藏
                  b.G()  删除基类中a.G()当用对象b去实例化其基类a时  A a = b;
      a.F() 依然调用b中隐藏的a.F()
      a.G() 则调用b中仅存的b.G()不知道能不能帮到你,呵呵。
      

  4.   

    还有一点,类之间是引用传递,
    A a = new A(); 
    A b = a ; 
    a , b 其实是指向同一块地址空间,当你改变对象b时,对象a同样被改变。
      

  5.   

    声明A类的一个实例a,让其值等于b