如果在某个基类中使用virtual声明了方法F(),则在子类中使用override重写方法F()。如果使用编译时类型为基类对象D来引用方法F(),则在编译时就不能确定实际调用的方法是基类的F,还是子类的F。而只能根据对象D在运行时的类型来确定,这就使整个程序有不同的处理结果。这就是C#的多态性的最大好处。
多态性对具体的编程项目有巨大的作用。例如,可以将一组具有共同基类的对象放到一个特定数组内,然后通过声明来为基类的对象调用它们的同名方法,这样不同类的对象就能分别调用它们各自对应的方法。从而简化了代码编写量,提高了开发效率。
1.处理方法多态性
处理方法多态性即在各类中方法具有的多态性。
实例44:根据定义的方法执行对应的处理方法
下面将通过一个简单实例来说明使用方法多态性的具体流程,本实例保存在“光盘:\daima\10”文件夹内,项目名为way。实例的功能是根据定义的方法执行对应的处理方法。实例文件的主要代码如下:
上述实例代码的设计流程如下。
1)定义基类club,并在其中声明虚方法F()。
2)定义club的派生子类en,并重写基类club的方法F(),用于输出英国。
3)定义club的派生子类it,并重写基类club的方法F(),用于输出意大利。
4)定义club的派生子类sp,并重写基类club的方法F(),用于输出西班牙。
5)定义club的派生子类ge,并重写基类club的方法F(),用于输出德国。
6)通过Read()获取类型,并设置球队所属类型种类数为4。(www.xing528.com)
7)定义方法F(),根据获取的球队类型调用对应的处理函数。
8)在Main()中分别调用对应的处理方法。
执行后将分别调用对应的处理方法而输出显示对应的文本,如图10-3所示。
图10-3 实例执行结果
多学一招
在C#中多态性的定义是:同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。C#支持如下两种类型的多态性。
(1)编译时的多态性
编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
(2)运行时的多态性
运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现。
2.更多成员的多态性
除了虚方法和方法重写外,C#还支持属性、索引器和事件的虚重写处理,即通过virtual和override对属性、索引器和事件进行修饰,实现多态性效果。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。