博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

override Method与new Method的区别

Posted on 2013-04-14 17:21  Dawnlight  阅读(600)  评论(0编辑  收藏  举报

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是重写了基类里的函数,一旦子类被被执行过,那么基类里的这个方法就被彻底隐藏了,指向子类的对象就会执行子类里面的方法。