不知鱼

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

先看一下如下代码,实现的是两个方法,MethA和MethB,基类中两个方法为虚方法;子类Class1中,重写了方法MethA,重载了方法MethB;而Class2中,则重写了方法MethB

View Code
 1 public abstract class BaseClass
 2     {
 3         public virtual void MethA()
 4         {
 5             Console.WriteLine("BaseClass.MethA");
 6         }
 7 
 8         public virtual void MethB()
 9         {
10             Console.WriteLine("BaseClass.MethB");
11         }
12     }
13 
14 
15     public class Class1 : BaseClass
16     {
17         public void MethA()
18         {
19             Console.WriteLine("Class1.MethA");
20         }
21 
22         public override void MethB()
23         {
24             Console.WriteLine("Class1.MethB");
25         }
26 
27     }
28 
29     public class Class2 : Class1
30     {
31         public new void MethB()
32         {
33             Console.WriteLine("Class2.MethB");
34         }
35 
36     }

 

看一下,如下代码的输出是什么? 

 

View Code
1 static void Main(string[] args)
2         {
3             Class2 class2 = new Class2();
4             class2.MethA();
5             class2.MethB();
6             Console.ReadLine();
7         }

 

是的,输出如下所示:

 

 

说明:

对于class2.MethA()的输出,因Class2继承于Class1,而Class1重写了MethA方法,所以,class2.MethA()是使用Class1中的MethA方法,输出Class1.MethA。

对于class2.MethB()的输出,因Class2重写了MethB方法,覆盖了父类中的MethB,所以,class2.MethB()是使用Class2中的MethB方法,输出Class2.MethB。

 

posted on 2013-03-27 14:25  不知鱼  阅读(101)  评论(0编辑  收藏  举报