override Method与new Method的区别

1,首先这个问题是建立在父类对象指向子类类型的,先不多说了,先上代码

代码一:输出结果为 A、B、A.fun

View Code
 1 using System;
 2 
 3 namespace ConsoleApplication1
 4 {
 5     class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9             A a = new B();
10             a.fun();
11         }
12     }
13 
14    public class A
15     {
16        public A()
17         {
18             Console.WriteLine("A");
19         }
20 
21        public virtual void fun()
22         {
23             Console.WriteLine("A.fun");
24         }
25     }
26 
27     public class B:A
28     {
29        public B()
30         {
31             Console.WriteLine("B");
32         }
33 
34         new public void fun()
35         { 
36             Console.WriteLine("B.fun");
37         }
38     }
39 }

代码二:输出结果为:A、B、B.fun

View Code
 1 using System;
 2 
 3 namespace ConsoleApplication1
 4 {
 5     class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9             A a = new B();
10             a.fun();
11         }
12     }
13 
14    public class A
15     {
16        public A()
17         {
18             Console.WriteLine("A");
19         }
20 
21        public virtual void fun()
22         {
23             Console.WriteLine("A.fun");
24         }
25     }
26 
27     public class B:A
28     {
29        public B()
30         {
31             Console.WriteLine("B");
32         }
33 
34         public override void fun()
35         { 
36             Console.WriteLine("B.fun");
37         }
38     }
39 }

代码一与代码二的主要区别就是在class B中对方法fun()的修士符,代码一是new  代码二是override吗,而两者的结果却截然不同,后来想了想,明白了

2.new Method实际上是新写了一个函数,基类里的仍然存在,当基类对象调用方法的是还是调用基类里面的方法;

     而override是重写了基类里的函数,一旦子类被被执行过,那么基类里的这个方法就被彻底隐藏了,指向子类的对象就会执行子类里面的方法。

原文地址:https://www.cnblogs.com/oracleblogs/p/3020619.html