代码:
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()" 了.

相关文章:

  • 2021-06-09
  • 2021-09-24
  • 2022-02-03
  • 2021-10-11
  • 2022-02-20
  • 2022-12-23
  • 2022-02-11
猜你喜欢
  • 2022-12-23
  • 2021-10-13
  • 2021-12-21
  • 2021-08-28
  • 2021-06-14
  • 2021-12-23
相关资源
相似解决方案