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("我不是一个孩子") ;
		}
	}
}

如果大家对上边的代码能够理解的话,说明你多多态已经有一个初步的了解了,对于一般的管理软件来说是够用了。以后对其进行更深入的理解需要自己去研究了,

posted @ 2012-01-08 23:15  sdgxboy  阅读(276)  评论(0编辑  收藏  举报