导航

多态

Posted on 2006-04-14 09:09  Alex的Blog  阅读(2206)  评论(2编辑  收藏  举报
多态
       多态是指为同名的方法提供不同的实现的能力,它使得我们不用关心方法的具体实现而仅仅依靠其名称来进行调用操作。比如我们现在有一个Road的类需要调用Drive方法,不管我们有什么样的车,Bike,Car,Jeep,尽管他们的Drive方式不同,但只要他们有Drive方法,我们的Road就可以调用他们的Drive方法使他们在上面“行驶”。多态集中体现了对象世界的共同行为。C#为我们提供了三种多态能力:接口多态,继承多态,抽象多态。
       接口定义一个类型需要实现的方法,属性,索引和事件,包括可能的参数类型和返回值类型,而把具体的实现交由相应的类或结构来做,从而为组件提供多态能力。接口多态不仅为组件提供一个更好的逻辑功能的聚合方式,也为组件的多版本提供了很好的支持。随着组件规模的不断增长,需要的成员越来越多,将所有的成员简单地封装在一个组件内既不符合我们的逻辑思维方式,更会带来烦恼的版本问题。而将这些成员分解成多个聚合的逻辑块,然后采用接口的形势将他们进行封装,这种方式很好地解决了组件在设计和维护两个方面的问题。接口多态在现代软件开发中有着广泛的应用。
       类继承使得子类自动拥有父类大多数的成员,C#允许我们通过普通的类继承来为组件提供多态能力。继承常用于在一个现有父类的基础上的功能扩展,往往是我们将几个类中相同的成员提取出来放在父类中实现,然后在各自的子类中加以继承。“子类 is a 父类,苹果 is a水果”是继承多态的经典测试用语。继承对于小规模的软件开发多有裨益,但在现代集群组件开发模式下,由于常常引入晦涩的逻辑误用和不必要的编码负担,它往往不被推荐使用。
       抽象多态是指通过abstract(抽象)类同时实现继承和接口的多态功能。抽象类中既可以包括实现了的成员,也可以是仅仅提供成员接口而没有具体实现。抽象类不能被实例化,必须在其继成类中实现相应的接口,否则子类也应被标志为abstract。抽象类在为其子类提供一个恒定的功能集的同时,也为其子类提供了一个具备扩展能力的弹性接口。抽象类在组件的初始设计时非常有用,但由于类不能进行多继承,它的多态能力较之接口多态要有所损失。