如下程序的运行结果是:
public abstract class A 

public A() 

Console.WriteLine('A'); 

public virtual void Fun() 

Console.WriteLine("A.Fun()"); 

} public class B: A 

public B() 

Console.WriteLine('B'); 
} public new void Fun() 

Console.WriteLine("B.Fun()"); 
} public static void Main() 

A a = new B(); 
a.Fun(); 

}
   1. A B A.Fun() 
   2. A B B.Fun()
   3. B A A.Fun()
   4. B A B.Fun()

解决方案 »

  1.   

    是先1吧
    A a=new B();这一句,因为继承所以先调用A()再调用B();输出A,B.
    a.Fun();这里为什么没有表现出多态,运行时的B的方法呢,因为B用了new ,用new关键字后的Fun()方法与多态无关了,所以可以看成没有方式,而调用继成的A.Fun().如果用override则会是B.Fun();
      

  2.   

    咋没人答呢,试一下不就知道了么。
    选 1. A B A.Fun()  个人理解:
    1,因为new 的是B()所以先走 B的类,而A是B的基类,所以调用的时候先调用A的构造函数,然后再调用B的构造函数。也就产生了 A B 的效果。
    2,声明的是A的对象。所以在调用函数的时候走的是A的成员函数而不是B的。
      

  3.   

    再理解一下,main里面我认为是相当于这样的:B a = new B();  //输出A B
    a = (A)a;
    a.Fun();   //输出A.Fun()   
      

  4.   

    B的Fun()如果 没有new也没用override的话怎么理解,为什么结果还是一样。
    调用引用类型的还是对象的类型的方法怎么确定的