virtual new override

代码:
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();
        }
}
public class C: A 
{
        public C()
      {
            Console.WriteLine('C');
        }
        public override void Fun() 
      {
            Console.WriteLine("C.Fun()");
        }
        public static void Main() 
      {
          A a = new B();
          a.Fun();
          a=new C();
          a.Fun();
        }
}
执行结果:
A
B
A.Fun()
A
C
C.Fun()
从结果可以看到new关键字修饰的方法没有被执行,而执行了基类的方法。这是为什么啊?不是说new会隐藏基类方法吗
而override却执行了本类的方法

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

new 是保留基类方法的前提下新的方法
overwrite 是彻底覆盖基类方法
B a  =  new  B(); 
a.Fun();
就是 "B.Fun()" 了.

posted @ 2009-08-17 10:46  pursue  阅读(177)  评论(0)    收藏  举报