2012年9月2日星期日

5.继承

5.继承

引言:本博文主要介绍上篇博文所介绍的关于c#的类的继承问题,在面向对象的编程中,分为实现继承和接口继承。结构不能继承,但是可以派生自多个接口。

如果声明派生自另一个类的一个类,可以使用以下的语法;

class MyClass:MyBaseClass{//some functions}

5.1 虚方法

把一个方法声明为virtual,就可以在任何派生类中重写该函数

class MyBaseClass{public virtual string VirtualMethod(){return "This method is virtual and defined in MyBaseClass";}}

属性也可以声明为virtual,用法与非虚属性相同,这里只讨论方法。在派生类中重写另一个函数时,需要使用override关键字声明,比如重写上面的虚方法,可以使用以下代码:

class MyClass:MyBaseClass{public override string VirtualMethod(){return "This method is an override defined in MyClass";}}

注意:成员字段和静态函数都不能声明为virtual,因为只对类的实例函数成员才有意义。

5.2 隐藏方法

如果在基类和派生类中都声明了签名相同的方法,但是该方法没有声明为virtual何override,基类的方法就会被隐藏。但是如果要隐藏的是派生类的方法,可以在方法声明时加上new关键字。

5.3  调用函数的基类版本

c#支持在派生类中调用方法的基类版本:base.<MethodName>()。下面的代码演示了在派生类中返回基类方法的90%得值:

class CustomerAccount{public virtual decimal Price(){return 0.0M;}}class GoldAccount:CustomerAccount{public override decimal Price(){return base.Price()*0.9M;}}

TAG: