边写边学.Net之方法的重写

 

重写,通俗的理解就是,把以前的东东重写一遍。
首先,我们来看看在什么情况下,会需要重写父类的方法呢?
第一、父类提供的方法为抽象(abstract)方法,抽象方法是不可用的,子类必须要对其实现(重写)。
第二、父类提供的方法(非抽象方法)不能满足子类的需求时,子类可以根据自身要求进行重写。

1.我们先看第一种情况,父类的方法定义为abstract,即没有具体实现,抽象方法是不可以直接调用的,如果强行调用,在编译器这一关就过不去。

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace WritingAndLearning
7 {
8 abstract class BaseClass
9 {
10 public abstract void BaseAbstarctMethod();
11 }
12 }
 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace WritingAndLearning
7 {
8 class SubClass:BaseClass
9 {
10 public override void BaseAbstarctMethod()
11 {
12 base.BaseAbstarctMethod();//直接调用父类抽象方法,编译器会报错
13 }
14 }
15 }

错误截图如下:

该图显示,不能调用父类的抽象成员。

子类中的重写方法修改成下面的Code后,编译器错误消失,正常运行。

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace WritingAndLearning
7 {
8 class SubClass:BaseClass
9 {
10 public override void BaseAbstarctMethod()
11 {
12 //base.BaseAbstarctMethod();//直接调用父类抽象方法,编译器会报错
13 Console.WriteLine("This is an override method.");//子类自己的实现
14 }
15 }
16 }

总结:其实这里对抽象方法的重写,更好的一种叫法,是对父类抽象方法的实现,因为父类只给出了一个申明,并没有方法体,所以称之为抽象方法实现更为妥当。

 

2.隐藏并重写父类方法

父类中用abstract修饰的方法,为抽象方法,只有方法申明,没有方法实现。

父类中用virtual修饰的方法,为虚方法,必须有方法申明和方法实现。

对父类中非抽象方法的重写,有两种途径,分别使用两个关键字override和new.

我们先看看关键字override

 

posted @ 2012-03-05 11:31  预备程序员  阅读(2122)  评论(0编辑  收藏  举报