本文学习多态的实现。
虚函数可以实现多态 :
就是基类定义一个函数使用virtual来进行修饰,然后在继承类里面使用override进行重写,这样clr在调用实例的方法的时候会判断这个实例到底是那个类型的实例,然后去调用对应的实例的实现。
这里有一个好的用法,就是可以把子类的对象转化成基类的对象,然后当作一个集合进行操作。
using System; using System.Data; using System.Text; namespace myStu { /* 对于多态的学习 1 虚函数 2 接口 3 抽象函数。 */ class programe { static void Main(string[] arg) { try { person[] objs = new person[]{new person() ,new man() ,new woman ()}; for (int i=0;i<3;i++ ) { objs[i].say() ; } } catch (Exception err) { Console.WriteLine(err.Message); } } } class person { public virtual void say() { Console.WriteLine("人开始说话了") ; } } class man : person { public override void say() { Console.WriteLine("女人开始说话了") ; } } class woman : person { public override void say() { Console.WriteLine("男人开始说话了") ; } } }
接口实现多态 和虚拟类实现多态,实现方式和虚方法实现的方式是一样的下边是代码
using System; using System.Data; using System.Text; namespace myStu { /* 对于多态的学习 1 虚函数 2 接口 3 抽象函数。 */ class programe { static void Main(string[] arg) { //虚方法实现多态 try { person[] objs = new person[]{new person() ,new man() ,new woman ()}; for (int i=0;i<3;i++ ) { objs[i].say() ; } } catch (Exception err) { Console.WriteLine(err.Message); } //接口实现多态 ,接口这个实现的叫多态吗 ? 不通过下边这种方式可以实现多态吗? Irun[] os = new Irun[]{new bus() ,new card()}; for (int i=0;i<2;i++ ) { os[i].run() ; } // 抽象类实现多态 child[] childs = new child[]{new boy() ,new girl() ,new nochild ()}; for (int i=0;i<3;i++ ) { childs[i].say() ; } } } class person { public virtual void say() { Console.WriteLine("人开始说话了") ; } } class man : person { public override void say() { Console.WriteLine("女人开始说话了") ; } } class woman : person { public override void say() { Console.WriteLine("男人开始说话了") ; } } interface Irun { void run() ; } class bus :Irun { public void run() { Console.WriteLine("bus 开车了") ; } } class card:Irun { public void run() { Console.WriteLine("card 开车了") ; } } abstract class child { public abstract void say() ; } class boy:child { public override void say() { Console.WriteLine("我是一个男孩") ; } } class girl:child { public override void say() { Console.WriteLine("我是一个女孩") ; } } class nochild:child { public override void say() { Console.WriteLine("我不是一个孩子") ; } } }
如果大家对上边的代码能够理解的话,说明你多多态已经有一个初步的了解了,对于一般的管理软件来说是够用了。以后对其进行更深入的理解需要自己去研究了,