前两篇博客介绍了面向对象的封装和继承,接下来介绍面向对象的第三大特性:多态。
*定义
同意操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性通过派生类复写积累中的虚函数型方法来实现。
**类型
1.编译时的多态性
编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
2.运行时的多态性
运行时的多态性就是指到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性通过复写虚成员实现。
***相关概念
1. 虚方法
声明:使用virtual关键字
调用虚方法,因刑事将确定调用对象是什么类的实例,并调用适当的覆写的方法。
虚方法可以有实现体。
2.重载和覆写对比

< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgIDxzdHJvbmc+KioqKtei0uI8L3N0cm9uZz48L3A+CjxwPiAgICAgIDEu19PA4NLUuLjA4LXEye233bP2z9ajrLWr1Nq5pNf3yrHS1NfUvLq1xLe9yr3AtMq1z9ahozwvcD4KPHA+ICAgICAgMi7X08Dg0tS4uMDgye233bP2z9bKsaOs19PA4MzY09C1xMr00NS6zbe9t6iyu7/J0tTKudPDoaM8L3A+CjxwPjxicj4KPC9wPgo8cD48c3Ryb25nPiAgICAqKioqKsq1wP08L3N0cm9uZz48L3A+CjxwPjxwcmUgY2xhc3M9"brush:java;"> public class DrawingBase { public virtual void Darw() //加了virtual,为虚方法,可以被子类重写 { Console.WriteLine("我是一个普通绘图对象。"); } } public class Line : DrawingBase { public override void Darw() //override,表示方法重写 { Console.WriteLine("我是一条线。"); } } public class Circle : DrawingBase { public override void Darw() //override,表示方法重写 { Console.WriteLine("我是一个圆"); } } static void Main(string[] args) { DrawingBase dObj = new DrawingBase[2]; dObj[0] = new Line(); dObj[1] = new Circle(); foreach (DrawingBase drawObj in dObj) ; drawObj.Draw(); return 0; }
我是一条线。
我是一个圆。