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