C# 适应虚函数,抽象类,接口分别实现多态的方法总结。

本文学习多态的实现。

虚函数可以实现多态 :

就是基类定义一个函数使用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("我不是一个孩子") ; } } }
如果大家对上边的代码能够理解的话,说明你多多态已经有一个初步的了解了,对于一般的管理软件来说是够用了。以后对其进行更深入的理解需要自己去研究了,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值